无法通过 AWS Cognito 在访问令牌中传递 Azure AD 角色

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

我不确定如何将 Azure 访问令牌中的 Azure 角色转移到 AWS cognito 访问令牌。

所以我有一个带有 Azure Federation Gateway 的认知用户池(Auth Flow)设置。当我点击 Azure/../Token URL 时,我将获得角色 P360_SuperUser。 但是,当我点击 cognito URL 时,我将获取用于获取 access_token 的代码(通过点击 cognito/token 端点)。但 Cognito 生成的令牌不包含来自 Azure 的角色。

如何将 Azure 角色和其他声明传递给 AWS Cognito 访问令牌

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

您需要在用户池中为

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.