基于Session的认证⽅式
在分布式的环境下,基于session的认证会出现⼀个问题
,每个应⽤服务都需要在session中存储⽤户身份信息,通过负载均衡将本地的请求分配到另⼀个应⽤服务需要将session信息带过去,否则会重新认证。我们可以使⽤Session共享、Session黏贴等⽅案。Session⽅案也有缺点
,⽐如基于cookie,移动端不能有效使⽤等基于token的认证⽅式
基于token的认证⽅式,服务端不⽤存储认证数据
,易维护扩展性强,客户端可以把token 存在任意地⽅,并且可以实现web和app统⼀认证机制,token就是一个令牌, 可以从认证服务中拿到令牌,之后去其他微服务的时候通过token验证进入到其他的微服务。其缺点也很明显
,token由于⾃包含信息,因此⼀般数据量较⼤,⽽且每次请求 都需要传递,因此⽐较占带宽。另外,token的签名验签操作也会给cpu带来额外的处理负担。介绍
:OAuth(开放授权)
是⼀个开放协议/标准,允许⽤户授权第三⽅应⽤访问他们存储在另外的服务提供者上的信息,⽽不需要将⽤户名和密码提供给第三⽅应⽤或分享他们数据的所有内容。结合
“使⽤QQ登录其他应用”这个场景拆分理解上述那句话 首先,xxx⽹——>登记——>QQ平台
QQ 平台会颁发⼀些参数给拉勾⽹,后续上线进⾏授权登录的时候(刚才打开授权⻚⾯)需要携带这些参数
client_id
:客户端id(QQ最终相当于⼀个认证授权服务器,拉勾⽹就相当于⼀个客户端了,所以会给⼀个客户端id),相当于账号secret
:相当于密码OAuth2流程细化图
资源所有者(Resource Owner)
:可以理解为⽤户⾃⼰客户端(Client)
:我们想登陆的⽹站或应⽤,⽐如拉勾⽹认证服务器(Authorization Server)
:可以理解为微信或者QQ资源服务器(Resource Server)
:可以理解为微信或者QQ第三⽅授权登录的场景
:⽐如,我们经常登录⼀些⽹站或者应⽤的时候,可以选择使⽤第三⽅授权登录的⽅式,⽐如:微信授权登录、QQ授权登录、微博授权登录等,这是典型的 OAuth2 使⽤场景。单点登录的场景
:如果项⽬中有很多微服务或者公司内部有很多服务,可以专⻔做⼀个认证中⼼(充当认证平台⻆⾊),所有的服务都要到这个认证中⼼做认证,只做⼀次登录,就可以在多个授权范围内的服务中⾃由串⾏。授权码(authorization-code)
:授权码模式使⽤到了回调地址,是最复杂的授权⽅式,微博、微信、QQ等第三⽅登录就是这种模式密码式(password)提供⽤户名 密码换取token令牌
:我们重点讲解接⼝对接中常使⽤的password密码模式(提供⽤户名 密码换取token)
Spring Cloud OAuth2
是 Spring Cloud
体系对OAuth2
协议的实现,可以⽤来做多个微服务的统⼀认证(验证身份合法性)授权(验证权限)。OAuth2
服务(统⼀认证授权服务)发送某个类型的grant_type
进⾏集中认证和授权,从⽽获得access_token(访问令牌)
,⽽这个token是受其他微服务信任的。联系客服