我不确定如何将 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 访问令牌
您需要在用户池中为
roles
创建自定义属性,然后配置 Amazon Cognito 中的自定义属性与 Azure AD 中的 roles
声明之间的属性映射。
通用指南可在this官方知识中心文章中找到,但我扩展了这些步骤并根据您的具体情况定制了答案。
AWS 控制台 > 您的用户池 >“注册体验”>“自定义属性”>“添加自定义属性”
将名称设置为
roles
,将其他所有内容保留为默认值(类型:字符串,可变:是**1)并“保存更改”。现在,您可以将 roles
从 Azure 映射到 Cognito ID 令牌中的 custom:roles
2**。
AWS 控制台 > 您的用户池 >“登录体验”>“联合身份提供商登录”> 您的联合身份提供商(本例中为 Azure AD)>“属性映射”>“编辑”
添加新条目,在第一个“用户池属性”列中选择
custom:roles
,并将 roles
设置为 OpenID Connect 属性,该属性与 Azure AD 令牌的属性相匹配。这会将联合身份令牌中的 roles
映射到 Cognito ID 令牌中的 custom:roles
。然后,“保存更改”。
custom:roles (mutable)
的“读取”和“写入”复选框使您的应用程序客户端能够使用自定义属性3。根据需要对尽可能多的应用程序客户端重复此操作。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 形式对包含非字母数字字符的值进行编码(不包括 '.'、'- '、'' 和 '_' 字符)。您可能需要解码和解析应用程序中的各个值。*