如何验证资源服务器的OAuth 2.0访问令牌?

当客户端请求资源服务器使用OAuth 2.0访问令牌获取受保护资源时,此服务器如何验证令牌? OAuth 2.0刷新令牌协议?


201511月更新 - 按照下面的Hans Z. - 现在的确被定义为RFC 7662的一部分。

OAuth 2.0规范没有明确定义访问令牌(AT)验证的资源服务器(RS)和授权服务器(AS)之间的交互。 它实际上取决于AS的令牌格式/策略 - 有些令牌是自包含的(如JSON Web令牌),而另一些可能与会话cookie相似,因为它们只是将信息引回到AS中的内存中。

OAuth工作组已经进行了一些讨论,讨论如何创建RS与AS进行AT验证通信的标准方式。 我的公司(Ping Identity)为我们的商业OAuth AS(PingFederate)提出了一个这样的方法:https://documentation.pingidentity.com/pingfederate/pf/index.shtml#concept_grantTypeParameters.html#concept_grantTypeParameters(请参阅访问令牌验证授予类型 )。 它使用基于REST的交互,这与OAuth 2非常相辅相成。

-


Google的方式

Google Oauth2令牌验证

请求:

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg

响应:

{
  "audience":"8819981768.apps.googleusercontent.com",
  "user_id":"123456789",
  "scope":"https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
  "expires_in":436
}

Github的方式

Github - Oauth2检查授权

请求:

GET /applications/:client_id/tokens/:access_token

响应:

{
  "id": 1,
  "url": "https://api.github.com/authorizations/1",
  "scopes": [
    "public_repo"
  ],
  "token": "abc123",
  "app": {
    "url": "http://my-github-app.com",
    "name": "my github app",
    "client_id": "abcde12345fghij67890"
  },
  "note": "optional note",
  "note_url": "http://optional/note/url",
  "updated_at": "2011-09-06T20:39:23Z",
  "created_at": "2011-09-06T17:26:27Z",
  "user": {
    "login": "octocat",
    "id": 1,
    "avatar_url": "https://github.com/images/error/octocat_happy.gif",
    "gravatar_id": "somehexcode",
    "url": "https://api.github.com/users/octocat"
  }
}

亚马逊方式

使用Amazon登录 - 开发者指南(2015年12月,第21页)

要求:

https://api.amazon.com/auth/O2/tokeninfo?access_token=Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...

回应:

HTTP/l.l 200 OK
Date: Fri, 3l May 20l3 23:22:l0 GMT 
x-amzn-RequestId: eb5be423-ca48-lle2-84ad-5775f45l4b09 
Content-Type: application/json 
Content-Length: 247 

{ 
  "iss":"https://www.amazon.com", 
  "user_id": "amznl.account.K2LI23KL2LK2", 
  "aud": "amznl.oa2-client.ASFWDFBRN", 
  "app_id": "amznl.application.436457DFHDH", 
  "exp": 3597, 
  "iat": l3ll280970
}

@Scott T.的答案更新:2015年10月IETF RFC 7662中标准验证的资源服务器与授权服务器之间的接口标准化,请参阅:https://tools.ietf.org/html/rfc7662。 示例验证调用将如下所示:

POST /introspect HTTP/1.1
Host: server.example.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer 23410913-abewfq.123483

token=2YotnFZFEjr1zCsicMWpAA

和样本回应:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "active": true,
  "client_id": "l238j323ds-23ij4",
  "username": "jdoe",
  "scope": "read write dolphin",
  "sub": "Z5O3upPC88QrAjx00dis",
  "aud": "https://protected.example.net/resource",
  "iss": "https://server.example.com/",
  "exp": 1419356238,
  "iat": 1419350238,
  "extension_field": "twenty-seven"
}

当然,供应商和产品的采用将随着时间的推移而发生。

链接地址: http://www.djcxy.com/p/48017.html

上一篇: How to validate an OAuth 2.0 access token for a resource server?

下一篇: OAuth 2.0: Benefits and use cases — why?