【问题标题】:How can I verify an AWS Cognito OpenID JWT from GetOpenIdTokenForDeveloperIdentity?如何从 GetOpenIdTokenForDeveloperIdentity 验证 AWS Cognito OpenID JWT?
【发布时间】:2021-02-18 13:26:55
【问题描述】:

我的用户通过外部 SAML 提供程序进行身份验证,之后我在我的服务器上调用 GetOpenIdTokenForDeveloperIdentity 以返回用户的联合 IdentityId 和 OpenID JWT。

https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html

OpenID JWT 中的 sub 是用户的联合 IdentityId,我想在以后调用我的 API 时使用该令牌,我可以在其中取消签名和验证该令牌,以此来识别用户。

但是,我无法验证 JWT 的签名,因为没有 UserPoolId,它通常用于检索在此 url 中找到的公共 JWKS: https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json

  1. 如何验证这些 OpenID 令牌?

  2. 在 API 调用中将它们用作 ID 令牌是否合适?

  3. 如果不是:可以在客户端(Amplify)上交换 OpenID 令牌以获得 STS 凭据。这些凭据能否用于生成其他更合适的 ID JWT?

感谢任何帮助或指导。

【问题讨论】:

  • 您找到解决方案了吗?我也想不通

标签: amazon-web-services amazon-cognito aws-amplify


【解决方案1】:

花了一些时间和大量的谷歌搜索,但我想我找到了至少可以回答你的问题 #1 的部分。

首先,可以在此处找到不使用用户池时的众所周知的密钥:

https://cognito-identity.amazonaws.com/.well-known/jwks_uri

(向this SO post 提示,这让我知道了。)

其次,AWS Labs GitHub 有 a example here 显示使用用户池样式众所周知的密钥。将它换成非用户池密钥就可以了。

对于问题 #3(跳过),我发现没有办法这样做,所以对于问题 #2,我最终编写了一个 API Gateway Lambda Authorizer 来对从 GetOpenIdTokenForDeveloperIdentity 返回的令牌进行进一步处理,以确保一切正常向上和向上。

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 2018-03-07
    • 2021-10-03
    • 2022-01-26
    • 2020-10-27
    • 2018-09-04
    • 2019-11-16
    • 2021-10-03
    • 2016-07-26
    相关资源
    最近更新 更多