【发布时间】:2021-09-17 20:00:04
【问题描述】:
我对 AWS 比较陌生,因此我对此缺乏了解可能是我不明白为什么这不起作用的原因。但是,我已经浏览了网络以及解决方案的文档(现在已经有几天了);由于我仍然不明白的原因,这些解决方案不适用于我的情况。
我遇到的问题是我的用户设置了这些自定义属性,而这些自定义属性在对用户进行身份验证时不存在于 jwt access_token 中:
但是,当使用 @aws-sdk/client-cognito-identity-provider 在我的 express 后端对用户进行身份验证时:
const pool = await this._awsCognitoService
.initiateAuth({
AuthFlow: "USER_PASSWORD_AUTH",
ClientId: process.env.CLIENT_ID,
AuthParameters: {
USERNAME: data.email,
PASSWORD: data.password,
},
});
解码 AccessToken 后,我的自定义属性都不存在。
所以我为预令牌生成添加了一个 lambda 函数触发器 (https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-token-generation.html)
代码如下所示:
exports.handler = (event, context, callback) => {
event.response = {
"claimsOverrideDetails": {
"claimsToAddOrOverride": {
"custom:branch_id": event.request.userAttributes["custom:branch_id"],
"custom:company_id": event.request.userAttributes["custom:company_id"],
},
},
}
callback(null, event)
};
当用户进行身份验证(通过快速应用程序)时,会触发预令牌生成 Lambda 函数。
但是,从 initiateAuth(...) 检索到的访问令牌没有我设置要覆盖的那些属性。
我已经为读写的自定义属性设置了属性,所以这不是问题。 (https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html)
我知道这与问题无关,但我别无选择,只能尝试。我已经启用了应用程序客户端设置上的所有属性,这样我就可以看到那些甜蜜甜蜜的自定义属性,但仍然是一样的。令牌上不存在自定义属性。
最初,所有这些复选框都未选中。我将其恢复为初始状态,因为这对解决这种情况没有任何帮助。
任何帮助将不胜感激
【问题讨论】:
标签: amazon-web-services aws-lambda aws-sdk amazon-cognito