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

多租户Microsoft Entra应用如何让所有租户用户获取自定义Claims

解决多租户Entra应用自定义Claims跨租户不生效的问题

要让所有租户(包括外部租户和个人Microsoft账户)的ID令牌都包含user.jobtitle和user.officelocation自定义Claims,需要调整权限配置和Claims映射方式,具体步骤如下:

1. 配置应用级读取权限

多租户应用读取外部租户用户属性必须具备应用权限,而非仅委托权限:

  • 登录Microsoft Entra管理中心,找到你的应用,进入「API权限」页面。
  • 添加权限 → 选择「Microsoft Graph」→ 「应用权限」→ 搜索并勾选User.Read.All权限。
  • 点击「授予管理员同意」(需本租户管理员操作),同时确保外部租户的管理员已为其租户用户授权该权限(或引导用户触发管理员同意流程)。

2. 使用Claims映射策略替代静态自定义Claims

Entra管理中心的静态自定义Claims仅对本租户用户生效,需通过Claims映射策略动态拉取用户属性:

  • 打开PowerShell,连接Microsoft Graph:
    Connect-MgGraph -Scopes "Policy.ReadWrite.ApplicationConfiguration"
    
  • 创建跨租户Claims映射策略:
    $policyBody = @{
        DisplayName = "CrossTenantCustomClaimsPolicy"
        ClaimsSchema = @(
            @{
                Name = "jobtitle"
                Source = "user"
                SourceClaim = "jobTitle"
                JwtClaimType = "jobtitle"
            },
            @{
                Name = "officelocation"
                Source = "user"
                SourceClaim = "officeLocation"
                JwtClaimType = "officelocation"
            }
        )
    }
    New-MgPolicyClaimMappingPolicy -BodyParameter $policyBody
    
  • 将策略分配给你的应用:
    # 替换为你的应用ID
    $appServicePrincipalId = (Get-MgServicePrincipal -Filter "AppId eq '你的应用ID'").Id
    $policyId = (Get-MgPolicyClaimMappingPolicy -Filter "DisplayName eq 'CrossTenantCustomClaimsPolicy'").Id
    New-MgServicePrincipalClaimMappingPolicyByRef -ServicePrincipalId $appServicePrincipalId -RefId $policyId
    

3. 验证配置

  • 用外部租户或个人Microsoft账户登录应用,解码ID令牌(可使用jwt.ms工具),检查是否包含jobtitle和officelocation字段。
  • 若个人Microsoft账户无对应属性,令牌中会缺失该字段,需在业务逻辑中处理空值场景。

注意事项

  • 之前配置的自定义签名密钥无需调整,其仅负责令牌签名,不影响Claims生成逻辑。
  • 外部租户需确保已同意应用的User.Read.All权限,否则无法读取用户属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:25:03