当前位置: 首页 > news >正文

微服务统一认证方案

1、微服务架构下统一认证思路

基于Session的认证方式:

        在分布式的环境下,基于session的认证会出现一个问题,每个应用服务都需要在session中存储用户身份信息,通过负载均衡将本地的请求分配到另一个应用服务需要将session信息带过去,否则会重新认证。我们可以使用Session共享、Session黏贴等方案。

  Session方案也有缺点,比如基于cookie,移动端不能有效使用等。

基于token的认证方式

        基于token的认证方式,服务端不用存储认证数据,易维护扩展性强, 客户端可以把token 存在任意地方,并且可以实现web和app统一认证机制。其缺点也很明显,token由于自包含信息,因此一般数据量较大,而且每次请求都需要传递,因此比较占带宽。另外,token的签名验签操作也会给cpu带来额外的处理负担。

2、OAuth2开放授权协议/标准

2.1、OAuth2介绍

        OAuth(开放授权)是一个开放协议/标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。

        允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。

结合“使用QQ登录拉勾”这个场景拆分理解上述那句话:

  • 用户:我们自己
  • 第三方应用:拉勾网
  • 另外的服务提供者:QQ
  • OAuth2是OAuth协议的延续版本,但不向后兼容OAuth1即完全废止了OAuth1。

2.2、OAuth2协议角色和流程

        拉勾网要开发使用QQ登录这个功能的话,那么拉勾网是需要提前到QQ平台进行登记的(否则QQ凭什么陪着拉勾网玩授权登录这件事)。

  1. 拉勾网——登记——>QQ平台
  2. QQ 平台会颁发一些参数给拉勾网,后续上线进行授权登录的时候(刚才打开授权页⾯)需要携带这些参数:
    1. client_id :客户端id(QQ最终相当于一个认证授权服务器,拉勾网就相当于一个客户端了,所以会给一个客户端id),相当于账号
    2. secret:相当于密码

  • 资源所有者(Resource Owner):可以理解为用户自己
  • 客户端(Client):我们想登陆的网站或应用,比如拉勾网
  • 认证服务器(Authorization Server):可以理解为微信或者QQ
  • 资源服务器(Resource Server):可以理解为微信或者QQ 

2.3、什么情况下需要使用OAuth2?

第三方授权登录的场景:比如,我们经常登录一些站或者应用的时候,可以选择使用第三方授权登录的方式,比如:微信授权登录、QQ授权登录、微博授权登录等,这是典型的 OAuth2 使用场景。

单点登录的场景:如果项目中有很多微服务或者公司内部有很多服务,可以专门做一个认证中心(充当认证平台角色),所有的服务都要到这个认证中心做认证,只做一次登录,就可以在多个授权范围内的服务中自由串行。

2.4、OAuth2的颁发Token授权方式

  • 授权码(authorization-code)
  • 密码式(password)提供⽤户名+密码换取token令牌
  • 隐藏式(implicit)
  • 客户端凭证(client credentials)

        授权码模式使用到了回调地址,是最复杂的授权方式,微博、微信、QQ等第三方登录就是这种模式。我们重点讲解接口对接中常使用的password密码模式(提供用户名+密码换取token)。

相关文章:

  • PMP知识的应用思考
  • 详谈js之面向对象
  • 深度学习笔记其三:多层感知机和PYTORCH
  • iOS小技能:截获分析网络数据包( tcpdump 、Wireshark的原理和基本使用 、使用Charles联调测试)
  • 阿里 Java 程序员进阶笔记!计算机基础 +OS+ 算法数据结构
  • Revit MEP中连接件的巧妙定位?及管线快速连接?
  • SP94-PEG-DSPE,DSPE-PEG-SP94,磷脂-聚乙二醇-靶向肽SP94
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • 获取两个时间的区间
  • 神经调节的知识网络图,图神经网络与知识图谱
  • HBase优化
  • 【论文笔记】Population Based Training of Neural Networks(PBT)
  • React之一些函数或者方法的扩展
  • 普通人修谱必须读的三本书,最后一本市场买不到
  • 巧妙简单的坑人代码,“巩固”你和好哥们的友谊【坏笑】
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【译】理解JavaScript:new 关键字
  • Android 架构优化~MVP 架构改造
  •  D - 粉碎叛乱F - 其他起义
  • flask接收请求并推入栈
  • Git 使用集
  • HashMap剖析之内部结构
  • Java-详解HashMap
  • js如何打印object对象
  • Laravel5.4 Queues队列学习
  • Linux快速复制或删除大量小文件
  • Quartz初级教程
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 测试如何在敏捷团队中工作?
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 前端性能优化--懒加载和预加载
  • 日剧·日综资源集合(建议收藏)
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 《天龙八部3D》Unity技术方案揭秘
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​ArcGIS Pro 如何批量删除字段
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #、%和$符号在OGNL表达式中经常出现
  • $(selector).each()和$.each()的区别
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (LeetCode 49)Anagrams
  • (Python第六天)文件处理
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)fiber的基本认识
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (五)Python 垃圾回收机制
  • .NET Core跨平台微服务学习资源
  • .NET delegate 委托 、 Event 事件
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET MVC第五章、模型绑定获取表单数据