我有一个场景,其中OIDC似乎非常合适:一个移动应用程序,用户需要从服务器获取一些私有数据。我已经阅读了OIDC教程such as this one,我认为我理解它们,但在全球范围内仍然存在一个关键的最终“漏洞”。
无论如何,如果我正确理解OIDC的代码流,这是相互作用的简短摘要:
scope
中指出我们对用户的电子邮件感兴趣。它将提供redirect_uri
指向移动应用程序本身中运行的简单Web服务器的指针。redirect_uri
与移动应用联系,并提供授权码。redirect_uri
,其中必须发送回复。redirect_uri
与应用程序联系,并提供已签名的JWT以及我们要求的声明(电子邮件)。这是教程结束的地方。我认为现在暗示移动应用程序会将步骤4中获得的JWT发送到我的服务器。但是,服务器如何知道JWT有效?当然,它是由OIP签署的,但服务器是否应该有一个硬编码的OIP公钥列表来验证JWT?我发现的OIDC教程中似乎缺少这些最后的关键步骤......
答案 0 :(得分:3)
OpenID授权代码流程]在第4点略有不同。一旦获得授权令牌,客户端就会向令牌端点请求令牌ID,返回包含ID令牌的响应,而无需重定向(请求必须包含redirect_uri
param,服务器将确保与原始版本相同)
这是完整的OpenID Authorization code flow
- 客户端准备包含所需的身份验证请求 请求参数。
- 客户端将请求发送给授权 服务器。
- 授权服务器对最终用户进行身份验证。
- 授权服务器获取最终用户同意/授权。
- 授权服务器使用授权码将最终用户发送回客户端。
- 客户端使用令牌端点上的授权码请求响应。
- 客户端收到响应正文中包含ID令牌和访问令牌的响应。
- 客户端验证ID令牌并检索最终用户的主题标识符。
醇>
最后,客户必须根据 3.1.3.4 ID Token Validation 验证令牌。重点的摘要如下:
iss
包含发布者标识符aud
client_id
iat
和exp
之间的当前时间
使用发卡行提供的密钥验证令牌的签名。在该流程中,可以使用TLS服务器验证来验证发行者而不是检查令牌签名。对于HMAC,client_id的client_secret
用作验证的密钥
要求验证nonce
,azp
或azr