You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Azure AD令牌中的角色等属性映射至AWS Cognito令牌?

将Azure角色转移至AWS Cognito访问令牌的解决方案

要把Azure令牌中的roles声明同步到Cognito生成的访问令牌里,需要通过身份提供商声明映射+Pre Token Generation Lambda触发器来实现,具体步骤如下:

1. 提前配置Cognito用户池自定义属性

在Cognito用户池的「属性」选项卡中,添加一个自定义属性custom:roles,类型选择「字符串」,勾选「可写入」和「可读」,用于存储从Azure传递过来的角色信息。

2. 配置Azure身份提供商的声明映射

根据你使用的身份协议(OIDC/SAML),将Azure的roles声明映射到Cognito的custom:roles属性:

  • OIDC协议:在Cognito用户池的「身份提供商」→ 你的Azure OIDC提供商 →「属性映射」中,添加映射规则:将Azure的roles声明映射到Cognito的custom:roles属性。
  • SAML协议:在Cognito用户池的「身份提供商」→ 你的Azure SAML提供商 →「属性映射」中,将SAML断言中的角色属性(通常是http://schemas.microsoft.com/ws/2008/06/identity/claims/role)映射到Cognito的custom:roles属性。

3. 创建Pre Token Generation Lambda触发器

编写Lambda函数,在Cognito生成访问令牌前,将custom:roles中的角色信息添加到令牌声明中:

exports.handler = async (event) => {
    // 从用户属性中获取Azure传递的角色
    const azureRoles = event.request.userAttributes['custom:roles'];
    let rolesArray = [];
    
    // 处理角色格式,兼容字符串或JSON数组
    if (azureRoles) {
        try {
            rolesArray = JSON.parse(azureRoles);
        } catch (err) {
            // 如果是单个角色的字符串形式,转为数组
            rolesArray = [azureRoles];
        }
    }
    
    // 将角色添加到访问令牌的claims中
    event.response = {
        claimsOverrideDetails: {
            // 添加roles声明到令牌
            claimsToAddOrOverride: {
                'roles': rolesArray
            },
            // 可选:同时设置Cognito用户组(如果需要用组权限)
            groupOverrideDetails: {
                groupsToOverride: rolesArray
            }
        }
    };

    return event;
};

4. 关联Lambda触发器到Cognito用户池

在Cognito用户池的「触发器」选项卡中,找到「Pre Token Generation」触发器,选择你刚创建的Lambda函数并保存。

验证结果

完成配置后,重新通过授权码流获取Cognito访问令牌,解码令牌即可看到roles声明已经包含Azure传递的角色信息。

内容的提问来源于stack exchange,提问作者Naved Akhtar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:15:11