架构师小飞传第二弹 - 登录系统的设计

小飞,在完成纯数据型服务的同时,还要考虑服务的认证问题。通过调研小飞了解到原来HTTP的认证方式有这么多种,而最适合数据服务的接口访问授权模式是APIKEY模式,小飞的调研方向也是从这里开始的。小飞写了一个配置文件。其中包含了配置项APPKEY,是手动的。给每一个上游服务提供了一个唯一性的标识。
image
  • 用户向业务系统发出资源请求

  • 业务系统自己验证用户的登录信息

  • 业务系统进行自己的统计

  • 业务系统添加上自己的APPKEY

  • 访问数据服务

  • 数据服务读自己的配置文件。从而判断APPKEY是否合法

    这种模式简单容易实现,不过很快就遇到了问题。因为团队之间的某些关于人的问题,小飞团队希望能知道每个用户的访问情况。于是演变成了从用户通过AppKey访问平台,并由平台办法给用户APIKEY。用户每次根据APIKEY来访问接口。
    image
  • 用户向业务系统发出请求

  • 业务系统会根据自己的APPKEY以及用户的ID向服务系统发出申请APIKEY的请求

  • 数据服务将生成的APIKEY写到Redis中,并记录一些必要的用户信息

  • 数据服务将APIKEY通过业务系统直接返回到用户系统

  • 用户获取到APIKEY

  • 再次请求时,用户将APIKEY带到每个请求中

  • 业务系统将APIKEY带到数据服务中发出请求

  • 数据服务根据在Redis中找到APIKEY对应的信息

  • 返回给用户数据

随着业务的发展,小飞也开始有了自己的第一个业务系统,有了自己的登录系统。但是小飞遇到了一个难题,用户数据被其他团队牢牢地攥在手里,经过多次的沟通都拿不到数据,其他端对只愿意给小飞提供登录接口,不肯提供用户数据给小飞。小飞做了一个奇葩的决定,其他团队的登录系统作为自己业务系统的下游。
image
  • 用户输入Name和Password发送到认证系统
  • 认证系统进行用户的获取
  • 认证系统将用户信息封装成JWT返回给用户
  • 用户访问业务系统
  • 业务系统解码JWT
  • 业务系统将解码的用户信息中APIKEY拿出来
  • 业务系统访问数据服务的时候带上APIKEY
    HTTP协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们必须再次认证。JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。这里JWT的知识,还是可以去了解阮一峰老师的博客小飞的Web让公司看到了价值,兄弟团队要两个项目可以免登录相互跳转。这一下可费了劲了!在这时候小飞又学会一招,signature认证。

小飞之前的登录系统,前端居然是用明文传输的。这要是被中间拦截了,找谁说理去?小飞记得当年上学的时候配置SSH免密登录,还有Github的认证。
image
  • 用户向认证服务请求私钥
  • 认证系统通过x.509系统生成一对秘钥同时生成SSID记录到Redis中
  • 用户获取到公钥之后对用户的密码和账号进行加密
  • 用户用自己的SSID和密文,发给认证服务器
  • 认证服务器通过x.509对秘钥进行解码获取到用户名和密码
  • 认证服务器再通过用户名和密码进行用户的认证

小飞的团队越来越大,又来了两个产品经理。两个产品经理串通一气,要求实现单点登录的功能。于是乎小飞决定亲自上阵。在打通前后端的不归路上越走越远。
image

单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的总结,无论多么复杂的流程与机制,只要系统有一条流程线就不会混乱。

  • 用户访问系统,如果没有权限会302到页面
  • 用户在SSO页面完成登录
  • SSO后端将JWT以及状态码返回给页面
  • SSO前端将JWT,302回业务系统的前端
  • 业务系统获取到302访问后端
  • 业务后端向SSO发出请求,带上JWT
  • SSO向业务系统返回UserInfo的JSON格式

认证

  • Appkey和ApiKey的应用
  • Cookie和Session的应用
  • jwt和session

登录

  • 原理
  • 单点登录

用户中心

  • 脱敏
  • 中台
  • RBAC
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355