OpenID Connect 访问令牌有啥用?

Posted

技术标签:

【中文标题】OpenID Connect 访问令牌有啥用?【英文标题】:What is the OpenID Connect access token for?OpenID Connect 访问令牌有什么用? 【发布时间】:2018-04-16 20:47:13 【问题描述】:

OpenID Connect JWT 令牌同时包含 id_tokenaccess_token(如 "access_token": "SlAV32hkKG")。 access_token 是干什么用的?

回答示例

只是添加一个例子来补充来自this linked article的答案

用户信息端点请求
GET /userinfo HTTP/1.1
Host: openid.c2id.com
Authorization: Bearer SlAV32hkKG
用户信息端点响应
HTTP/1.1 200 OK
Content-Type: application/json


  "sub"                     : "alice",
  "email"                   : "alice@wonderland.net",
  "email_verified"          : true,
  "name"                    : "Alice Adams",
  "picture"                 : "https://c2id.com/users/alice.jpg"

【问题讨论】:

【参考方案1】:

tl;dr - 访问令牌授予访问受保护资源的授权,其中 ID 令牌 被客户端用于身份验证。

访问令牌

作为 OAuth2.0 的扩展,OpenID Connect 保留了 OAuth2.0 规范中定义的令牌/参数。 访问令牌就是这样一种东西。正如协议所定义的,访问令牌用于访问受保护的资源。它取代了过去使用的用户凭据、手动生成的令牌或安全密钥(例如:- 考虑基本身份验证)。

请注意,访问令牌可能是不透明的字符串。这意味着接收它的客户不能消费任何东西。但是授权服务器知道它是什么。例如,自省端点 (RFC7662) 可用于验证访问令牌的有效性。并且访问令牌也可以是 JWT,具体取决于使用和实现。

ID 令牌

这是 OpenID Connect 引入 OAuth2.0 的内容。 ID 令牌是 JWT,客户端使用它来验证最终用户(资源所有者)。通过验证 ID 令牌,客户端可以进行身份​​验证。由于这一事实,人们可以说它可以使用一次。

另请注意,在某些实现中,ID 令牌被用作不记名令牌。这意味着,ID 令牌用作身份验证和授权的访问令牌。

【讨论】:

【参考方案2】:

您的问题的答案在于specification 的第 5.3 和 16.4 节。访问令牌用于访问作为受保护资源的 userinfo 端点。

16.4。访问令牌披露

访问令牌是用于访问受保护资源的凭据,如 OAuth 2.0 [RFC6749] 第 1.4 节中所定义。访问令牌代表最终用户的授权,不得暴露给未经授权的各方。

[...]

5.3。用户信息端点

UserInfo 端点是一个 OAuth 2.0 受保护资源,它返回有关经过身份验证的最终用户的声明。为了获得所请求的有关最终用户的声明,客户端使用通过 OpenID Connect 身份验证获得的访问令牌向 UserInfo 端点发出请求。这些声明通常由一个 JSON 对象表示,该对象包含声明的名称和值对集合。

【讨论】:

以上是关于OpenID Connect 访问令牌有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 OpenId Connect 的刷新令牌在 asp.net 核心中处理过期的访问令牌

在 OpenID Connect 中,是不是可以将 id 令牌而不是访问令牌传递给资源服务器进行授权?

ASP.NET Web API 和 OpenID Connect:如何从授权码中获取访问令牌

OAuth 和 OpenId Connect 令牌说明

OpenID Connect Core 1.0使用授权码流验证(上)

expires_in 或 expires_at 用于 OpenId 连接中的访问令牌?