什么是客户端应用程序应该通过OpenID Connect获得的JWT?

时间:2017-01-24 15:17:19

标签: jwt openid-connect oidc

我有一个场景,其中OIDC似乎非常合适:一个移动应用程序,用户需要从服务器获取一些私有数据。我已经阅读了OIDC教程such as this one,我认为我理解它们,但在全球范围内仍然存在一个关键的最终“漏洞”。

无论如何,如果我正确理解OIDC的代码流,这是相互作用的简短摘要:

  1. 移动应用程序将联系OIP授权终端,在scope中指出我们对用户的电子邮件感兴趣。它将提供redirect_uri指向移动应用程序本身中运行的简单Web服务器的指针。
  2. OIP将通过redirect_uri与移动应用联系,并提供授权码。
  3. 移动应用程序现在将联系OIP令牌端点,并为其提供在步骤2中获取的授权码。它还将为OIP提供redirect_uri,其中必须发送回复。
  4. OIP将通过redirect_uri与应用程序联系,并提供已签名的JWT以及我们要求的声明(电子邮件)。
  5. 这是教程结束的地方。我认为现在暗示移动应用程序会将步骤4中获得的JWT发送到我的服务器。但是,服务器如何知道JWT有效?当然,它是由OIP签署的,但服务器是否应该有一个硬编码的OIP公钥列表来验证JWT?我发现的OIDC教程中似乎缺少这些最后的关键步骤......

1 个答案:

答案 0 :(得分:3)

OpenID授权代码流程]在第4点略有不同。一旦获得授权令牌,客户端就会向令牌端点请求令牌ID,返回包含ID令牌的响应,而无需重定向(请求必须包含redirect_uri param,服务器将确保与原始版本相同)

这是完整的OpenID Authorization code flow

  
      
  1. 客户端准备包含所需的身份验证请求   请求参数。
  2.   
  3. 客户端将请求发送给授权   服务器。
  4.   
  5. 授权服务器对最终用户进行身份验证。
  6.   
  7. 授权服务器获取最终用户同意/授权。
  8.   
  9. 授权服务器使用授权码将最终用户发送回客户端。
  10.   
  11. 客户端使用令牌端点上的授权码请求响应。
  12.   
  13. 客户端收到响应正文中包含ID令牌和访问令牌的响应。
  14.   
  15. 客户端验证ID令牌并检索最终用户的主题标识符。
  16.   

最后,客户必须根据 3.1.3.4 ID Token Validation 验证令牌。重点的摘要如下:

  • iss包含发布者标识符aud client_id

  • iatexp之间的当前时间

  • 使用发卡行提供的密钥验证令牌的签名。在该流程中,可以使用TLS服务器验证来验证发行者而不是检查令牌签名。对于HMAC,client_id的client_secret用作验证的密钥

  • 要求验证nonceazpazr

相关问题