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"
  }