如何访问/传输/映射角色属性从我的 Azure AD 令牌到我的 Cognito 令牌?

问题描述 投票:0回答:1

我不确定如何将 Azure 角色从 Azure 访问令牌转移到 AWS Cognito 访问令牌。

我有一个使用 Azure 联合网关设置的 Cognito 用户池(授权代码流)。

当我访问 Azure 令牌 URL 时,我会收到与此类似的令牌:

{
    "aud": "21718f33-3abc7",
    "roles": ["P360_SuperUser"]
}

但是,当我访问 Cognito 令牌 URL 时,Cognito 生成的令牌不包含来自 Azure 的角色。

我正在尝试弄清楚如何将 Azure 角色和其他声明转移到 AWS Cognito 访问令牌。我希望这些角色包含在 Cognito 访问令牌中。

azure-active-directory amazon-cognito access-token
1个回答
0
投票

我希望将这些角色包含在 Cognito 访问令牌中。

这对于访问令牌来说是不可能的 - 只能用于 ID 令牌。


如果 ID 令牌中存在相同的数据,您可以在用户池中为

roles
创建自定义属性,然后配置 Amazon Cognito 中的自定义属性与 Azure AD 中的
roles
声明之间的属性映射。

通用指南可在this官方知识中心文章中找到,但我扩展了这些步骤并根据您的具体情况定制了答案。


  1. AWS 控制台 > 您的用户池 >“注册体验”>“自定义属性”>“添加自定义属性”

  2. 将名称设置为

    roles
    ,将其他所有内容保留为默认值(类型:字符串,可变:是**1)并“保存更改”。现在,您可以将
    roles
    从 Azure 映射到 Cognito ID 令牌中的
    custom:roles
    2**。

  1. AWS 控制台 > 您的用户池 >“登录体验”>“联合身份提供商登录”> 您的联合身份提供商(本例中为 Azure AD)>“属性映射”>“编辑”

  2. 添加新条目,在第一个“用户池属性”列中选择

    custom:roles
    ,并将
    roles
    设置为 OpenID Connect 属性,该属性与 Azure AD 令牌的属性相匹配。这会将联合身份令牌中的
    roles
    映射到 Cognito ID 令牌中的
    custom:roles
    。然后,“保存更改”。

  1. AWS 控制台 > 您的用户池 >“应用程序集成”>“应用程序客户端列表”> 您的应用程序客户端 >“属性读写权限”>“编辑”> 勾选
    custom:roles (mutable)
    的“读取”和“写入”复选框使您的应用程序客户端能够使用自定义属性3。根据需要对尽可能多的应用程序客户端重复此操作。

  1. 使用 Cognito ID 令牌中的
    custom:roles
    声明来获取
    P360_SuperUser
    4

1 根据 docs,您从 IdP 映射的所有用户池自定义属性都必须是可变的。 这是因为 不可变属性只能在您创建用户时写入 并且因为我们'在创建用户之后重新设置属性的值,我们需要它是可变的。

2

根据 docs,自定义属性名称在 Amazon Cognito 请求中始终以“custom:”为前缀。这是无法更改的,是为了区分自定义属性和标准属性。

3

根据 docs,当用户通过 IdP 登录时,Amazon Cognito 将需要在登录时使用 IdP 的最新值更新映射属性。默认情况下,自定义属性设置为“不可读取”和“不可写入”。即使配置为可变,Cognito 仍然要求您将映射的用户池 custom:roles 属性设置为可读可写;否则,它无法更新属性并且会抛出错误。这需要改变。

4
roles

是一个数组,可以包含多个值。根据

docs,如果它包含多个值,Cognito 会将所有(数组)值展平为单个空格分隔的字符串,并且 URL 形式对包含非字母数字字符的值进行编码(不包括 '.'、'- '、'' 和 '_' 字符)。您可能需要解码和解析应用程序中的各个值。*


© www.soinside.com 2019 - 2024. All rights reserved.