如何从GetOpenIdTokenForDeveloperIdentity验证AWS Cognito OpenID JW



我的用户通过外部SAML Provider进行身份验证,之后我在服务器上调用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. 如果没有:OpenID令牌可以在客户端(Amplify)上交换STS凭证。是否可以使用这些凭证生成其他更合适的ID JWT?

任何帮助或指导都是感激的。

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

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

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

(向这篇文章致敬,这篇文章让我想到了这一点。)

第二,AWS实验室GitHub在这里有一个示例,展示了如何使用用户池样式的众所周知的密钥。将它替换为非用户池密钥就可以了。

对于问题#3(跳过),我发现没有办法做到这一点,所以对于问题#2,我最终编写了一个API网关Lambda授权器,对从GetOpenIdTokenForDeveloperIdentity返回的令牌进行进一步处理,以确保事情是向上的。

最新更新