【问题标题】:How to add custom roles or groups added in Cognito JWT token?如何添加在 Cognito JWT 令牌中添加的自定义角色或组?
【发布时间】:2020-05-20 23:53:32
【问题描述】:

我真的很难在 Cognito 生成的 JWT 令牌中添加自定义角色或组。我在 Cognito 中使用 Pre-Token generation trigger 来执行 Lambda。我在响应中添加了“groupOverrideDetails”对象。这是我的最终输出:

"response": {
        "claimsOverrideDetails": {
            "claimsToAddOrOverride": {
                "custom_attribute_key2": "attribute_value2",
                "custom_attribute_key": "attribute_value"
            }
        },
        "groupOverrideDetails": {
            "groupsToOverride": [
                "developers"
            ],
            "iamRolesToOverride": [
                "S3_Access_Admin"
            ],
            "preferredRole": "S3_Access_Admin"
        }
    }

但在我的 JWT 令牌中,我没有看到任何上述角色或组。

  1. 你能告诉我我错过了什么吗?
    1. 其次,在 AWS 中实际存在“开发人员”组和“S3_Access_Admin”角色是否重要?如果我需要在 AWS 中添加自定义组怎么办?

【问题讨论】:

  • 您是否在身份池设置中选择了“从令牌中选择角色”?
  • 通过 chrome 开发者控制台并在网络选项卡中检查对 cognito 的所有调用,检查每个调用的响应是否包含这些组的 id 令牌。可能是您的群组信息已设置,但在另一个连续呼叫中立即被删除..

标签: amazon-cognito


【解决方案1】:

我不知道对您在声明中添加的组和角色进行了哪些验证,但我唯一看到的是您需要将groupOverrideDetails 嵌套在claimsOverrideDetails 中。这是我能够开始工作的 sn-p。

    role_arns = ...
    event['response'] = {
        'claimsOverrideDetails': {
            'groupOverrideDetails': {
                # we don't need to modify the groups in our case
                'groupsToOverride': request['groupConfiguration']['groupsToOverride'],
                # this will set the claim 'cognito:roles'
                'iamRolesToOverride': role_arns,
                # this will set the claim 'cognito:preferredRole'
                'preferredRole': role_arns[0],
            },
    }
    return event

以下 stackoverflow 问题帮助了我: AWS Cognito - create groups from ADFS as Cognito Groups

为了将来参考,这里是 aws 文档。向下滚动到标题为Pre Token Generation Example: Modify the User's Group Membership 的部分 https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-token-generation.html

【讨论】:

    【解决方案2】:

    如果您尝试将自定义属性添加到访问令牌,则不支持将自定义属性注入访问令牌。通常 Pre-Token 生成触发器会将它们添加到 id 令牌中。

    注意:如果您在前端使用放大,您可以获得 id 令牌

    Amplify.Auth.currentSession()).getAccessToken().getJwtToken()

    【讨论】:

      猜你喜欢
      • 2019-11-20
      • 2019-06-05
      • 2017-01-03
      • 2014-01-23
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 2021-01-17
      • 2016-09-24
      相关资源
      最近更新 更多