2019独角兽企业重金招聘Python工程师标准>>>

前言

分布式用户认证, 有个简单的称谓就是单点登陆, 即一处登陆,到处通行.
说详细一点就是,集中的用户统一身份认证和分布的式的用户验证和资源访问控制.
对于小公司而言,提供的服务少,常常用户认证和服务混合在一起,体会不到分布式用户认证好处.
随着公司规模的扩大,提供的服务越来越多,把用户认证和服务提供拆分开来,实现分布式用户认证,可降低系统的相互依赖性,提高系统的可扩展性.

常见的方案

基于普通token的方案.

这个方案通常在用户登录后,把用户信息储存与中心服务器, 同时给客户端一个普通token, 以后访问服务时均以此token识别用户身份. 这个token只是一个hash值,一个唯一的ID,自身不含用户信息,要辨别token的真伪,需要的中心服务器查询,这是一个集中用户认证的方案,简单易用,当可扩展性不高.

本文介绍一个新的方案

基于JSON Web Token(JWT)的方案.

JWT,简单的说就是把用户的公开信息和信息的签名合成一个字符串,保证信息无法伪造.详细可参考互联网上的资料。
JWT 和基于hash值的普通token的主要不同点:

  1. JWT 自身包含用户的公开信息。
  2. JWT 不用到中心服务器查询就可验证真伪。
    这些特点,使得JWT 很像现实生活中的身份证,签证等证件。
    这个方案,通过用户登陆后,中心服务器给客户端一个JWT,这个JWT包含用户的公开信息,还有用户权限等信息。之后,客户端访问服务时,就以这个JWT作为身份识别,而服务提供者,不用到中心服务器查询,自己可校验这个JWT的真伪。

以示范案例说明

以一个社区应用例,功能模块如下:

  1. 发帖讨论的论坛模块
  2. 实时通信模块
  3. 收费的教育视频模块
  4. 收费的音乐模块
    当然,以上四部分都需要用户认证。
    这四个模块,通常由四个项目组完成。

作为架构设计者,有两个重要的思想:

  1. 假设这四个模块,分别由四个独立的公司来开发。
  2. 每个模块不只我们公司用,其他公司也可用
    就是把API或是服务service 当做最终独立的产品来设计,这样就能设计出好的架构.

对于这个系统,我们看看用户认证系统如何设计?
抛开传统的登陆概念,传统的登陆通常只是登陆一个地方,访问一种服务.

当设计认证系统时,不要想我们在设计软件系统,就当在设计一个国家,没错一个虚拟的国家.
看看国家的分布式用户认证是怎么运作的?
以美国为例,移民局负责颁发用户签证,而里面的大学,酒店,企业就是各种服务提供者.
这里用户认证和服务提供是分开的.

要入境美国,首先得像移民局申请签证.
当用户拿着签证去住酒店时,酒店服务员会查看签证的真伪及有效期.
当用户拿着签证去住企业应聘时,企业会查看签证的真伪及有效期,还有就是权限,如果是旅游签证,对不起,旅游签证不能打工.
注意:签证是由移民局集中发行的,而校验确是分布的.
酒店服务员验证签证时,不会打电话到移民局查询真伪.

我们的用户认证系统,其实只要把这一套机制帮过来即可.
由统一的用户认证系统负责颁发签证,而用户访问各种服务时,持有这个签证就可以了.
用户认证后,我们可以把用户的公开信息如user id等,还有就是授权信息,比如6个月的视频教程授权,1个月的音乐授权等写到这个签证上,这样用户就可访问各种服务.
JWT 防伪有两类签名机制,一类是基于secretKey的Hash机制,一类是非对称签名机制.
第一类Hash机制,JWT的创建和验证使用同一个秘钥,仅适合公司内部用.对应开放平台,要开放给其他公司使用,需要采用非对称签名机制,这样创建和校验是两个秘钥,保证token的集中发行.

分布式JWT用户验证的问题.

分布式JWT用户验证的问题的一个问题是,Token 一旦发行,无法注销,只能等其自行失效.
这个不单是JWT的问题,所有可分布式验证的证件都有这个问题,包括身份证,签证,驾照等.
驾照丢了,去管理局注销,但这个注销,不会让丢失的驾照立即失效,除非驾照的验证是集中式的.
这也是为什么几乎所有的证件都有一个有效期的原因.

对应JWT,为了保证安全,我们可以使用一个比较短的有效期,同时采用一种以旧换新的机制,确保安全.
这个机制有点类似生活中的驾照年审或者签证延期,即每隔一段时间做一次审查并核发新证,由于不需要人工操作,我们的这个审查频率提高一些.

Token以旧换新的机制,请参看:
http://www.jianshu.com/p/b4cf771e570e

注:现实生活中,护照和签证有些差别,对于软件系统这个差别就不考虑了,统一当成证明身份的证件.

转载于:https://my.oschina.net/u/3532467/blog/1554174

一种全新的分布式用户认证架构设计相关推荐

  1. 网易用户认证架构设计 | session token | 公开课笔记-01

    网易严选中的用户认证架构设计 (一)Session本质及限制分析 1.背景 目前是Web2.0交互式网络时代 HTTP:传输HTML(一种超文本标记语言,侧重静态,不随请求变化而变化),所以HTTP天 ...

  2. 分布式理论、架构设计(自定义RPC)

    会不断更新!冲冲冲!跳转连接 https://blog.csdn.net/qq_35349982/category_10317485.html 分布式理论.架构设计(自定义RPC) 1.分布式架构 1 ...

  3. 分布式理论、架构设计(自定义RPC一 NIO NETTY)

    分布式理论.架构设计自定义RPC 第一部分-RPC框架设计 1. Socket回顾与I/0模型 1.1 Socket网络编程回顾 1.1.1 Socket概述 1.1.2 Socket整体流程 1.1 ...

  4. 分布式实时处理系统架构设计与机器学习实践

    编者按:在2017年的1月11日,CSDN高级架构师金牌授课群为群友们带来了第一次的分享,讲师和主题参见这里,本文为课程后续的文字整理,第一时间发出来分享给读者,课件下载点击这里. 大家好,我们今天主 ...

  5. 开源分布式量化交易系统——架构设计

    准备工作 搭建一套量化系统并非一件容易的事,如果你是一位初出茅庐的程序猿,在下文中如遇到不懂的知识点请自行查阅相关资料,本文也会推荐一些文章和书籍,个人认为作为一名合格的程序猿,最基本的自学能力和探究 ...

  6. 大型网站分布式高并发架构设计

    1前言 网站架构包括:前端架构+应用层架构+服务层架构+存储层架构+后台架构+数据中心机房架构+安全架构+数据采集与监控. 以下为大型网站的一些架构: 2前端架构 浏览器优化技术 并不是优化浏览器,而 ...

  7. 分布式datax CDC架构设计

    分布式dataX CDC有两种可选方式,分布式作业和分布式时间槽 分布式作业在<分布式dataX详细(落地)设计>介绍过,dataX CDC单分片,使用分布式作业,只有一个worker作业 ...

  8. c++分布式游戏服务器架构设计

    文章目录 一.游戏服务器架构介绍 1.1 游戏服务器介绍 1.2 服务的划分 1.3 服务与服务之间的通讯 二.单个服务的并发 2.1 多线程并发问题 2.2 使用单线程协程并发 三.数据库的选择与使 ...

  9. 基于 Token 的多平台身份认证架构设计

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 一点一滴的Beer 来源 | https:// ...

最新文章

  1. 十一运夺金基础数据采集工具
  2. linux pmap命令,Linux pmap 命令用法详解-Linux命令大全(手册)
  3. vue知识点归纳与总结(笔记)
  4. 手机安装python的步骤_小白入门:Python安装的10个步骤,极其细致!!
  5. 工作305:对选择的数值清空
  6. Spring Cloud 采用Consul做配置中心
  7. selenium(java)遇到的问题
  8. TS流解析 二 *****
  9. 2020年第十届C/C++ B组第二场蓝桥杯省赛真题(跑步锻炼)第4道
  10. tomcat下载安装步骤(超详细)
  11. 似乎可以破解软件代码
  12. 大学英语四六级往年成绩查询+成绩单补办教程(四级/六级/4级/6级/46级)
  13. java字符串hash算法_Java常用HASH算法总结【经典实例】
  14. 沉睡者IT - 月赚几千的创业项目思路,抖音文案号网赚项目
  15. Restricted cubic splines
  16. 公司自用的国产API管理神器
  17. codeforces 14E. Camels(多维dp)
  18. 炫酷手持滚动弹幕生成小工具微信小程序源码
  19. 关于Java中封装和get/set方法的作用
  20. 如何使用京东的关键字搜索你想要的商品详情

热门文章

  1. Linux内核学习方法
  2. 小李飞刀系列之Oracle EBS期间平均成本(PAC)--生产成本计算(五)制造费用分摊
  3. 【课后习题】 线性代数第六版第二章 矩阵及其运算 习题二
  4. 爱迪尔门锁系统怎么连接服务器,爱迪尔门锁设置方法是什么?
  5. 手机拍照即可翻译识别文字,一键轻松搞定
  6. Python中变量的基本使用
  7. 吹得这么牛皮的RPC,到底是个什么鬼?该如何实现呢?
  8. 黑马程序员武汉校区 小舞老师 免费资料速速关注领取!!
  9. 夜神模拟器连接手柄无反应_为何我的夜神模拟器连接了手柄却用不了
  10. ABP VNext学习日记15