OAuth2 四种认证模式

授权码模式

授权码模式(authorization code)是功能最完整、流程最严密的授权模式,code保证了token的安全性,即使code被拦截,由于没有app_secret,也是无法通过code获得token的。

 角色行为与功能

  • 资源所有者
    只需要允许或拒绝第三方应用获得授权

  • 第三方应用
    申请成为资源服务器的第三方应用
    获取资源服务器提供的资源

  • 授权服务器
    提供授权许可code、令牌token等

  • 资源服务器
    提供给第三方应用注册接口,需要提供给第三方应用app_id和app_secret
    提供给第三方应用开放资源的接口

授权码模式授权方式顺序图

隐式授权模式/简化模式

简化模式相对于授权码模式省略了,提供授权码,然后通过服务端发送授权码换取AccessToken的过程。

client请求资源被浏览器转发至授权服务器

浏览器向资源拥有者索要授权,之后将用户授权发送给授权服务器

授权服务器将AccessToken以Hash的形式存放在重定向uri的fargment中发送给浏览器

浏览器访问重定向URI

资源服务器返回一个脚本,用以解析Hash中的AccessToken

浏览器将Access Token解析出来

将解析出的Access Token发送给client

密码模式

密码模式是用户直接将自己的用户名密码交给client,client用用户的用户名密码直接换取AccessToken。一般不支持刷新令牌。

 

用户将认证密码发送给client

client拿着用户的密码向授权服务器请求Access Token

授权服务器将Access Token和Refresh Token发送给client

这种模式十分简单,但是却意味着直接将用户敏感信息泄漏给了client,因此这就说明这种模式只能用于client是我们自己开发的情况下。因此密码模式一般用于我们自己开发的,第一方原生App或第一方单页面应用。

客户端凭证模式(client credentials)

一般用于资源服务器是应用的一个后端模块,客户端向认证服务器验证身份来获取令牌

这是一种最简单的模式,只要client请求,我们就将AccessToken发送给它。

client向授权服务器发送自己的身份信息,并请求AccessToken

确认client信息无误后,将AccessToken发送给client

这种模式是最方便但最不安全的模式。因此这就要求我们对client完全的信任,而client本身也是安全的。因此这种模式一般用来提供给我们完全信任的服务器端服务。在这个过程中不需要用户的参与。

 

 

 

posted on 2021-05-30 08:48  TrustNature  阅读(679)  评论(0)    收藏  举报