GCS*_*SDC 5 amazon-web-services amazon-cognito aws-lambda aws-api-gateway
我有一个典型的 AWS 设置,使用 API Gateway 和 Cognito 用户池身份验证并与 Lambda 函数集成。
一切正常,但现在我需要能够在 Lambda 中获取经过身份验证的用户 ID。
我在 SO 上看到了很多关于这个的问题/答案,但没有一个有助于完成这项工作。最接近的是这个答案,它链接到这个文档。
从上面的这些链接中,我了解到我应该访问映射模板上的“$context.authorizer.claims”的某些属性以获取用户 ID,但是我找不到可用属性的列表或应该使用哪个属性。
我也尝试使用 "$context.authorizer.principalId" 但这只会返回一个空字符串。
我目前正在使用 API 网关“方法请求传递”映射模板,但到目前为止已经尝试了许多不同的映射模板。
我在这里错过了什么或做错了什么?
如果需要任何进一步的信息,请告诉我。
对于那些面临这个问题的人。“ $context.authorizer.* ”将始终返回空,直到您使用 AWS Api Gateway / Lambda 测试对其进行测试。只需使用 Postman 等外部工具对其进行测试,它就会被填充。
我建议使用Lambda 代理集成。在这种情况下,您的 Lambda 收到的事件如下所示:
{
...
"requestContext": {
"resourceId": "...",
"authorizer": {
"claims": {
"sub": "<COGNITO SUB>",
"iss": "...",
"cognito:username": "<COGNITO USERNAME>",
"aud": "...",
"token_use": "id",
"auth_time": "...",
"exp": "...",
"iat": "..."
...
}
},
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
在sub位于event.requestContext.authorizer.claims.sub和用户名event.requestContext.authorizer.claims['cognito:username']。
如果使用映射模板,您可以执行以下操作:
{
"sub": "$context.authorizer.claims.sub",
"username": "$context.authorizer.claims["cognito:username"]"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4156 次 |
| 最近记录: |