根据我的理解,从OAuth到OpenID Connect的区别在于,当客户端访问OAuth的/ token端点时,OAuth会响应以下内容:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "SlAV32hkKG",
"token_type": "Bearer",
"refresh_token": "8xLOxBtZp8",
"expires_in": 3600,
"id_token": "e134j23jk432j"
}
我在阅读文档的印象中,ID令牌包含一个身份验证类型,表示用户是否通过输入密码来通过授权。因此,这将验证用户是否进行了身份验证,而不仅仅是授权。我还不清楚如何使用令牌来验证这一点。
我的理解是id_token对客户端不透明,所以客户是否有一种标准的信息解释方式?
此外,我在5. Definitions of Multiple-Valued Response Type Combinations
async/await
下找到的文档显示了对id_token进行/授权的示例请求。不应该在/ token?
答案 0 :(得分:0)
我的理解是id_token对客户端不透明
所以这是你需要澄清的地方。 Id令牌是JWT(rfc7519),必须由客户端验证。
请注意,此处的“客户”是依赖方。例如,它是一个网站。此客户端依赖于在openid提供程序(授权服务器,如rfc6749中所述)中完成的授权,并使用响应中的 id token 来验证“最终用户”。
从文档中引用,
OpenID Connect对OAuth 2.0进行身份验证的最终用户的主要扩展是ID令牌数据结构。 ID令牌是一种安全令牌,其中包含授权服务器在使用客户端时对最终用户的身份验证的声明,以及可能的其他请求的声明。 ID令牌表示为JSON Web令牌(JWT)
现在,回到问题。如何阅读和理解JWT并使用它来验证用户身份。 JWT的规范在这里 - rfc7519。它基本上包含以下格式的三个部分,
<强> H.C.S
强>
H(标题) - 包含类型和算法以及其他元信息
C(JWT声明) - 包含有关授权用户的声明
S(JWS签名rfc7515) - 基本上是用于验证标题和声明的MAC
这些部分中的每一部分都是base64url编码的。请注意,JWS由令牌颁发者签名。
从文档中引用
ID令牌必须使用JWS [JWS]进行签名,并且可选地分别使用JWS [JWS]和JWE [JWE]进行签名和加密,从而根据第16.14节提供身份验证,完整性,不可否认性和可选的机密性
需要在 id token
中验证哪些内容,specification提及您需要执行的操作。
希望这能澄清您对JWT的疑问以及它如何用于验证“最终用户”
不应该在/ token获取id_token吗?
这取决于您使用的流量。例如,implicit flow允许您在授权响应中获取id令牌。
p.s - 要查看id令牌的内容,您可以使用https://jwt.io/中的调试器功能