我的用户通过外部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
我如何验证这些OpenID令牌?
在API调用中使用它们作为ID令牌是否合适?
如果没有:OpenID令牌可以在客户端(Amplify)上交换STS凭证。是否可以使用这些凭证生成其他更合适的ID JWT?
任何帮助或指导都是感激的。
我花了一些时间和大量的谷歌搜索,但我想我找到了至少可以回答你的问题#1的片段。
首先,在不使用用户池时,可以在这里找到众所周知的密钥:
https://cognito-identity.amazonaws.com/.well-known/jwks_uri
(向这篇文章致敬,这篇文章让我想到了这一点。)
第二,AWS实验室GitHub在这里有一个示例,展示了如何使用用户池样式的众所周知的密钥。将它替换为非用户池密钥就可以了。对于问题#3(跳过),我发现没有办法做到这一点,所以对于问题#2,我最终编写了一个API网关Lambda授权器,对从GetOpenIdTokenForDeveloperIdentity返回的令牌进行进一步处理,以确保事情是向上的。