如何将 AD FS 组成员身份映射到自定义 AWS Cognito 属性?

Posted

技术标签:

【中文标题】如何将 AD FS 组成员身份映射到自定义 AWS Cognito 属性?【英文标题】:How can I map AD FS group membership to custom AWS Cognito attributes? 【发布时间】:2019-01-08 17:49:56 【问题描述】:

我的 AD FS 服务器上有以下声明:

LDAP 属性: 令牌组 - 不合格的名称

传出索赔类型: 组

在我的 Saml 响应中返回用户所属的组:

    <AttributeStatement>
        <Attribute Name="http://schemas.xmlsoap.org/claims/Group">
            <AttributeValue>Domain Users</AttributeValue>
            <AttributeValue>AWS-Production</AttributeValue>
            <AttributeValue>AWS-Dev</AttributeValue>
        </Attribute>
    </AttributeStatement>

如何将这些组映射到自定义 cognito 用户池属性?

我已尝试使用以下 SAML 属性名称进行映射: http://schemas.xmlsoap.org/claims/Group 和 http://schemas.microsoft.com/ws/2008/06/identity/claims/groups

但属性不会映射到 Cognito。我尝试将我的自定义映射到电子邮件地址等其他属性并且成功了,只是我无法成功映射这些值的组。

附:抱歉,我会发布更详细地记录该过程的照片,但 imgur 在我的工作中被阻止了。

【问题讨论】:

两个重要的点,1) 确保自定义属性被标记为可变和可写,这听起来可能违反直觉,但它是映射工作的必要条件。 2) 如果您打算将该属性用于授权决策,则必须取消选中“aws.cognito.signin.user.admin”范围。这可以防止用户使用他们的访问令牌写入该属性。 你解决了吗? 【参考方案1】:

我最近必须进行类似的设置,当我将 AD 组映射到 Cognito custom:adgroups 用户池属性时,我的映射工作。

我的 SAML 响应片段如下所示:

<Attribute Name="https://aws.amazon.com/SAML/Attributes/Role">
    <AttributeValue>DEV-ODATA</AttributeValue>
    <AttributeValue>DEV-INDEX_PRICES</AttributeValue>
    <AttributeValue>DEV-INDEX_DELAYS</AttributeValue>
    <AttributeValue>DEV-WEBSITE_REPORTING</AttributeValue>
    <AttributeValue>DEV-VALIDATION</AttributeValue>
    <AttributeValue>DEV-ADMIN</AttributeValue>
    <AttributeValue>DEV-GUI</AttributeValue>
    <AttributeValue>DEV-FLOWS</AttributeValue>
    <AttributeValue>DEV-LEGAL</AttributeValue>
    <AttributeValue>DEV-IMG</AttributeValue>
    <AttributeValue>DEV-USER</AttributeValue>
</Attribute>

而且映射很简单

https://aws.amazon.com/SAML/Attributes/Role  ->   custom:adgroups

但之后出现了另一个问题,我必须将这些映射到 Cognito 组,您可能也想这样做,以管理应用程序权限。有关我如何找到解决方法的详细信息,请参见:AWS Cognito - create groups from ADFS

希望这会有所帮助。

【讨论】:

【参考方案2】:

我刚刚遇到这个问题,我的头撞在墙上好几天了。我终于通过在用户客户端上启用属性的读写权限来让它工作。

转到应用程序客户端页面,向下到底部,您将看到一个链接,其中说明设置属性读取和写入权限。当您单击它时,将出现一个新的 UI。为您的自定义属性单击读取和写入,然后 SAML 将有权进入那里。

【讨论】:

以上是关于如何将 AD FS 组成员身份映射到自定义 AWS Cognito 属性?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS Cognito 和 AD FS 作为 Web 应用程序的身份验证

将 FirebaseUser 映射到自定义用户对象

如何使用适用于AWS Cognito的AD FS SAML?

如何继续使用适用于 AWS Cognito 的 AD FS SAML?

如何使用 RKMappingOperation 将本地 NSDictionary 映射到自定义对象?

自定义Web应用程序中的AWS Cognito社交提供程序