Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端应用程序应该如何处理通过OpenID Connect获得的JWT?_Jwt_Openid Connect - Fatal编程技术网

客户端应用程序应该如何处理通过OpenID Connect获得的JWT?

客户端应用程序应该如何处理通过OpenID Connect获得的JWT?,jwt,openid-connect,Jwt,Openid Connect,我有一个场景,OIDC似乎很适合:一个移动应用程序,用户需要从服务器获取一些私有数据。我读过OIDC教程,我想我理解了它们,但在全球范围内仍然存在一个关键的“漏洞” 无论如何,如果我正确理解了OIDC的代码流,以下是交互的简要总结: 移动应用程序将联系OIP授权端点,在范围中指出我们对用户的电子邮件感兴趣。它将提供一个指向移动应用程序中运行的简单web服务器的指针 OIP将通过重定向uri联系移动应用程序,并向其提供授权码 移动应用程序现在将联系OIP令牌端点,并向其提供在步骤2中获得的授权代码

我有一个场景,OIDC似乎很适合:一个移动应用程序,用户需要从服务器获取一些私有数据。我读过OIDC教程,我想我理解了它们,但在全球范围内仍然存在一个关键的“漏洞”

无论如何,如果我正确理解了OIDC的代码流,以下是交互的简要总结:

  • 移动应用程序将联系OIP授权端点,在
    范围中指出我们对用户的电子邮件感兴趣。它将提供一个指向移动应用程序中运行的简单web服务器的指针
  • OIP将通过
    重定向uri
    联系移动应用程序,并向其提供授权码
  • 移动应用程序现在将联系OIP令牌端点,并向其提供在步骤2中获得的授权代码。它还将为OIP提供一个必须发送回复的
    重定向uri
  • OIP将通过
    重定向uri
    联系应用程序的,并向其提供一份签名JWT以及我们请求的索赔(电子邮件)

  • 这就是教程的结尾。我推测,现在这意味着移动应用程序会将步骤4中获得的JWT发送到我的服务器。但是,服务器如何知道JWT是有效的?当然,它是由OIP签名的,但是服务器应该有一个OIP公钥的硬编码列表来验证JWT吗?我发现OIDC教程中似乎缺少了这些最后的关键步骤…

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

    这是全文

  • 客户端准备一个包含所需内容的身份验证请求 请求参数
  • 客户端将请求发送到授权服务器 服务器
  • 授权服务器对最终用户进行身份验证
  • 授权服务器获得最终用户同意/授权
  • 授权服务器使用授权代码将最终用户发送回客户端
  • 客户端在令牌端点使用授权代码请求响应
  • 客户端接收一个响应,该响应在响应体中包含ID令牌和访问令牌
  • 客户端验证ID令牌并检索最终用户的主题标识符
  • 最后,客户端必须根据验证令牌。要点总结如下:

    • iss
      包含发卡机构标识符和
      aud
      您的
      客户id

    • iat
      exp

    • 使用发卡机构提供的密钥验证令牌的签名。在此流程中,可以使用TLS服务器验证来验证颁发者,而不是检查令牌签名。对于HMAC,客户端id的
      client\u secret
      用作验证密钥

    • 验证
      nonce
      ,请求
      azp
      azr


    感谢您的回复和对第4点的更正。但是,您没有回答我的实际问题:在移动应用程序验证令牌并将其发送到我的服务器后,服务器应该如何信任它?您必须使用服务器提供的公钥(或使用HMAC的密钥)验证令牌签名,然后检查一些声明的内容。验证可以在客户端或服务器端完成。通常,签名验证在服务器端完成,以避免将密钥分发给客户端。如果签名正确,您可以相信令牌是由发行人发行的,并且没有被更改。还请注意,如果您使用TLS受信任连接检索令牌,则可能会忽略签名验证