OAuth2.0授权方式

OAuth2.0授权方式

OAuth2.0授权方式

前文简单介绍了OAuth2.0,详情见:简单认识OAuth2.0

今天看一看授权方式,一共有四种,分别为:授权码、隐式授权,密码方式和客户端凭证。现在使用最多的也是最安全的就是授权码方式,以下分别简单介绍下:

授权码方式(authorization code)

授权码方式是最完整,流程最严密的授权方式,第三方应用先申请一个授权码(authorization code),然后再用该码获取令牌(Token)。

OAuth2.0授权方式

authorization code

它适用于那些有后端的 Web 应用,基于浏览器的重定向把用户导向第三方应用的软件页面。分为两个步骤,第一步通过web获取认证服务器的授权码,第二步通过使用第一步的授权码请求Token,这时候是在服务器后台进行的,用户是看不到的,因此这种方式是比较安全的。

一个例子,第一步发送获取授权码的请求

OAuth2.0授权方式

例子

其中的请求参数有些是必须的并且是固定的

  • response_type (必须),值为code
  • client_id (必须),每个应用的标记,让授权服务器知道是谁
  • redirect_uri(可选)重定向的地址
  • scope(可选)范围,比如读,写,服务器自己定义的字符串列表
  • state(可选,建议添加),客户端添加的用于保持一些状态等,授权服务会原装返回

获取授权码的请求发送后,授权服务器验证后,会把code=AUTHORIZATION_CODE&state=xzy返回给客户端。

第二步获取Token

OAuth2.0授权方式

获取token

用获取的授权码获取Token时需要的参数

  • grant_type (必须),值为authorization_code
  • code (必须),第一步获取的授权码
  • redirect_uri(必须)重定向的地址
  • clinet_id(必须)客户端的编号,如果授权服务器知道是谁
  • 请求被执行后,返回一个包含token的json数据,其中是access_token就是令牌信息,refresh_token则是刷新令牌时用到的令牌,避免重复以上2个步骤。

    OAuth2.0授权方式

    获取token

    到此验证就完了,以后访问服务器就需要带着这个Token了,

    简化版方式(隐式授权implicit)

    在没有后端的应用中,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为隐式授权。

    OAuth2.0授权方式

    隐式授权

    请求和授权码一样,只是response_type为token,授权服务器接收请求后,直接返回token,例如xxxxx#access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&token_type=example&expires_in=3600

    密码式(password

    把资源所有者用户名和密码作为获取访问令牌的授权许可,这种方式显然风险很大,因此只适用于其他授权方式都无法采用的情况,而且必须是用户高度信任的应应用。

    OAuth2.0授权方式

    密码式

    一个简单请求的例子:

    OAuth2.0授权方式

    密码方式的请求

    其中grant_type为password,username和password是资源所有者的用户名密码。

    客户端凭证(client)

    第三方应用以自己的名义,而不是以用户的名义向授权服务器索取认证,适用于没有前端的命令行应用,即在命令行下请求令牌。

    OAuth2.0授权方式

    客户端凭证

    这种请求的grant_type为client_credentials,只用这么一个参数是必须的。


    分享到:


    相關文章: