[学习笔记] SpringSecurity之认识OAuth2

# 学习 # · 2021-10-24

初识OAuth2

1、OAuth协议:一个关于授权(authorization)的开放网络标准,为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以 使用OAuth认证服务,任何服务提供商都可以实现自身的OAuth认证服务。

2、常见的OAuth2解析(微信登录):

3、OAuth2认证流程:

(1)用户打开客户端,客户端要求用户给予授权。

(2)用户同意给予客户端授权。

(3)客户端使用上一步获得的授权(一般是Code),向验证服务器申请令牌TOKEN。

(4)验证服务器对客户端进行认证以后,确认无误,同意发放令牌。

(5)客户端使用令牌,向资源服务器申请获取资源(用户信息等)。

(6)资源服务器确认令牌无误,同意向客户端开放资源。

4、令牌类型:

(1)授权码 :仅用于授权码授权类型,用于交换获取访问令牌和刷新令牌。

(2)访问令牌 :用于代表一个用户或服务直接去访问受保护的资源。

(3)刷新令牌 :用于去授权服务器获取一个刷新访问令牌。

(4)BearerToken :不管谁拿到Token都可以访问资源。

(5)Proof of Possession(PoP) Token :可以校验client是否对Token有明确的拥有权。

5、OAuth2的优点:

(1)更安全,客户端不接触用户密码,服务器端更易集中保护。

(2)广泛传播并被持续采用。

(3)短寿命和封装的token。

(4)资源服务器和授权服务器解耦。

(5)集中式授权,简化客户端。

(6)HTTP/JSON友好,易于请求和传递token。

6、OAuth2的缺点:

(1)协议框架太宽泛,造成各种实现的兼容性和互操作性差。

(2)不是一个认证协议,本身并不能告诉你任何用户信息。


授权模式

1、授权码模式(Authorization Code):功能最完整、流程最严密的授权模式。

(1)用户访问客户端,客户端将用户导向认证服务器。

(2)用户选择是否给予客户端授权。

(3)用户给予授权,认证服务器将用户导向客户端指定的重定向URI,同时附上授权码code。

(4)客户端收到授权码code,附上早先的重定向URI,向认证服务器申请token。

(5)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

2、简化授权模式(Implicit):不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过"授权码"。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。

(1)客户端将用户导向认证服务器。

(2)用户决定是否给于客户端授权。

(3)用户给予授权,认证服务器将用户导向客户端指定的"重定向URI",并在URI的Hash部分包含了访问令牌。

(4)浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值。

(5)资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌。

(6)浏览器执行上一步获得的脚本,提取出令牌。

(7)浏览器将令牌发给客户端。

3、密码模式(Resource Owner PasswordCredentials):

(1)用户向客户端提供用户名和密码。

(2)客户端将用户名和密码发给认证服务器,向认证服务器请求令牌。

(3)认证服务器确认无误后,向客户端提供访问令牌。

4、客户端模式(Client Credentials):

(1)客户端向认证服务器进行身份认证,并要求一个访问令牌。

(2)认证服务器确认无误后,向客户端提供访问令牌。

5、扩展模式(Extension):自定义模式。


刷新令牌

1、如果用户访问的时候,客户端的"访问令牌"已经过期,则需要使用"更新令牌"申请一个新的访问令牌。

(1)通过授权流程获取Access Token,并调用业务API接口。

(2)当调用业务API接口时响应“Invalid Token Error”时,调用刷新access_token接口,并响应最新的access_token和refresh_token。

如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/328/

评论