OAuth2.0 受权许可 之 Authorization Code

写在前面:

    在前一篇博客《OAuth2.0 原理简介》中咱们已经了解了OAuth2.0的原理以及它是如何工做的,那么本篇咱们未来聊一聊OAuth的一种受权许可方式:受权码(Authorization Code)javascript

什么是Authorization Code ?

   简单来讲受权码就是的在第三方应用程序请求Authrization Server来获取AccessToken以前的预先校验,增长了获取token的安全性。好比你吭哧吭哧写了一天的代码,急于回家吃上一口媳妇作的热饭。当你走到小区门口的时候你须要刷卡才能进入到小区,而后找到你家在哪一栋楼,几单元几号,而后掏出钥匙开门,才能回到家。在这个过程当中受权码就至关因而你在用钥匙开门回家的前一步身份确认,若是你不是这个小区的,那你天然是没有办法进入到小区内部的。受权码方式是OAuth2.0最经常使用的一种受权方式,好比:QQ,豆瓣,新浪微博等用的都是这种方式。html

受权码的工做流程解析

 

上图的流程表示了请求的全过程,须要注意的点是:java

发起受权请求须要的参数以下:安全

对应步骤(C),客户端向Authorization Server发起请求的时候须要提供如下参数:服务器

  1. response_type:必选。值固定为“code”。
  2. client_id:必选参数(第三方应用的标识ID,告诉服务器谁须要获得受权)
  3. state:Client提供的一个字符串,服务器会原样返回给Client。
  4. redirect_uri:必选参数(受权成功后的重定向地址)
  5. scope:可选参数(表示受权范围)

完整URL以下所示:加密

GET /authorize?response_type=code&client_id=1&state=xyz&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Foauth2&scope=user,photo HTTP/1.1
Host: server.example.com

获得受权返回数据以下:spa

对应上图中的步骤(E),A受权服务器会返回下面信息:.net

  1. code:受权码(用于的下一步中请求token使用)
  2. state:步骤(C)中客户端提供的state参数原样返回。

完整的URL以下:code

Location: https://client.example.com/oauth2?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz

发起获取token的请求参数以下:server

对应步骤(G):

  1. grant_type:必选参数(固定值“authorization_code”)
  2. code : 必选参数(上一步Response 中响应的code,避免在请求的过程当中被篡改)
  3. redirect_uri:必选参数(必须和Request中提供的redirect_uri相同)
  4. client_id:必选参数(必须和上一步Request中提供的client_id相同,不能token和受权码请求的第三方应用不一致)

获得token的response包含以下信息:

对应步骤(H):

  1. access_token:访问令牌(服务器端加密过的字符串)。
  2. refresh_token:刷新令牌(刷新令牌的字符串)
  3. expires_in:过时时间(令牌的过时时间)
{
   "access_token":"MJhjskotnFZFEjr1zCsicHJKSLA",
   "token_type":"granttype",
   "expires_in":4800, 
   "refresh_token":"JHJhjasdsjhKNSGKmzHDK", 
   "example_parameter":"example_value_test"
}

  若是有一天你的小区的钥匙被一个陌生人拿到了,那么他就能够名正言顺的进入的小区里面,那么他进入到你家的机会就大了不少。同样的道理,受权码若是被窃取的话,那么对方就能够直接用你的受权码来获取到token从而窃取到你的信息,在使用的时候咱们首先要要求受权码不可以被重复使用,若是一旦发如今token的生命周期内受权码被重复使用的话则会强制销毁此受权码生成的全部token,从新再作一次登录的受权验证。

写在最后:

    受权码是咱们平时用到的最多的一种受权方式,它使得咱们的的应用程序在获取token以前多了一个额外的安全层来保证咱们的受权和访问过程是安全可靠的。

    参考资料: https://oauth.net/2/grant-types/authorization-code/

相关文章
相关标签/搜索