Recognized Access Token 上的自定义属性
Custom attributes in Cognito Access Token
我对 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 后,我的 none 个自定义属性出现了。
所以我添加了一个用于预令牌生成的 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 函数确实会在用户进行身份验证时触发(通过 Express 应用程序)。
但是,从 initiateAuth(...)
检索到的访问令牌中有 none 个我已设置为覆盖的属性。
我已经在读写上设置了自定义属性的属性,所以这不是问题所在。
(https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html)
我知道这与问题无关,但我别无选择,只能尝试。我已经启用了 App Client Settings 上的所有属性,这样我就可以看到那些甜蜜的自定义属性,但仍然是一样的。令牌上没有自定义属性。
最初,所有这些复选框都未选中。我将其恢复到初始状态,因为这对情况没有任何帮助。
如有任何帮助,我们将不胜感激
据我了解,自定义属性仅可作为客户端上用于 id 令牌的额外元数据使用,它与身份验证过程完全无关,也不存在于访问令牌的 JWT 令牌中。
访问令牌有效负载包含关于经过身份验证的用户的声明,而不是自定义添加的属性。
您可以参考 this 了解更多信息。
这是 AWS 文档中的示例 ID 令牌负载:
{
"sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"aud": "xxxxxxxxxxxxexample",
"email_verified": true,
"token_use": "id",
"auth_time": 1500009400,
"iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
"cognito:username": "janedoe",
"exp": 1500013000,
"given_name": "Jane",
"iat": 1500009400,
"email": "janedoe@example.com".
"jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}
我对 AWS 比较陌生,所以我对此缺乏了解,这可能是我不明白为什么这不起作用的原因。但是,我浏览了网络以及解决方案的文档(现在几天了);由于我仍然不明白的原因,这些解决方案不适用于我的情况。
我遇到的问题是我的用户为他们设置了这些自定义属性,这些属性在验证用户时不存在于 jwt access_token 中:
这些是我在令牌中需要的自定义属性。
但是,当使用 @aws-sdk/client-cognito-identity-provider
:
const pool = await this._awsCognitoService
.initiateAuth({
AuthFlow: "USER_PASSWORD_AUTH",
ClientId: process.env.CLIENT_ID,
AuthParameters: {
USERNAME: data.email,
PASSWORD: data.password,
},
});
解码 AccessToken 后,我的 none 个自定义属性出现了。
所以我添加了一个用于预令牌生成的 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 函数确实会在用户进行身份验证时触发(通过 Express 应用程序)。
但是,从 initiateAuth(...)
检索到的访问令牌中有 none 个我已设置为覆盖的属性。
我已经在读写上设置了自定义属性的属性,所以这不是问题所在。
(https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html)
我知道这与问题无关,但我别无选择,只能尝试。我已经启用了 App Client Settings 上的所有属性,这样我就可以看到那些甜蜜的自定义属性,但仍然是一样的。令牌上没有自定义属性。
最初,所有这些复选框都未选中。我将其恢复到初始状态,因为这对情况没有任何帮助。
如有任何帮助,我们将不胜感激
据我了解,自定义属性仅可作为客户端上用于 id 令牌的额外元数据使用,它与身份验证过程完全无关,也不存在于访问令牌的 JWT 令牌中。 访问令牌有效负载包含关于经过身份验证的用户的声明,而不是自定义添加的属性。 您可以参考 this 了解更多信息。
这是 AWS 文档中的示例 ID 令牌负载:
{
"sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"aud": "xxxxxxxxxxxxexample",
"email_verified": true,
"token_use": "id",
"auth_time": 1500009400,
"iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
"cognito:username": "janedoe",
"exp": 1500013000,
"given_name": "Jane",
"iat": 1500009400,
"email": "janedoe@example.com".
"jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}