请求:
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
}
请求:
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"
}
}
使用亚马逊登录 - 开发者指南(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
}
更新于2015年11月: 根据下面的Hans Z.所述 - 这现在确实被定义为RFC 7662的一部分。
原始回答: OAuth 2.0规范(RFC 6749)没有清晰地定义资源服务器(RS)和授权服务器(AS)之间的访问令牌(AT)验证交互。这实际上取决于AS的令牌格式/策略 - 有些令牌是自包含的(例如像JSON Web Tokens),而其他令牌可能类似于会话cookie,只是引用存储在AS后台的信息。
OAuth工作组已经进行了一些讨论,以创建RS与AS进行AT验证通信的标准方式。我的公司(Ping Identity)已经为我们的商业OAuth AS(PingFederate)提出了一个方法:https://support.pingidentity.com/s/document-item?bundleId=pingfederate-93&topicId=lzn1564003025072.html#lzn1564003025072__section_N10578_N1002A_N10001。这使用REST的交互方式,非常适合OAuth 2.0。
@Scott T.的回答有更新:关于令牌验证的资源服务器和授权服务器之间的接口已在2015年10月的IETF RFC 7662中进行了标准化,详情请见:https://www.rfc-editor.org/rfc/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"
}
当然,厂商和产品的采用需要逐步实现。
scope
查询参数,其值包含以空格分隔的范围列表。 - Hans Z.OAuth 2.0规范没有定义这一部分,但是有几个选项:
当资源服务器在Authz头中接收到令牌时,它会调用Authz服务器上的验证/内省API来验证令牌。在这里,Authz服务器可以使用数据库存储或验证签名和某些属性来验证它。作为响应的一部分,它解码令牌并发送令牌的实际数据以及剩余的过期时间。
Authz服务器可以使用私钥对令牌进行加密/签名,然后将公钥/证书提供给资源服务器。当资源服务器获取到令牌时,它要么解密/验证签名以验证令牌,取出内容并处理令牌。然后它可以提供访问权限或拒绝访问。
OAuth v2 规范指出:
访问令牌属性和访问受保护资源所使用的方法超出了该规范的范围,并由相关规范定义。
我的授权服务器有一个 Web 服务 (SOAP) 端点,允许资源服务器知道访问令牌是否有效。