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

在Azure应用中将自定义安全属性配置为可选声明

问题解答

需求是否可实现?

可以实现,但不能直接通过你尝试的optionalClaims配置方式完成,因为自定义安全属性属于Azure AD的目录扩展属性,需要通过**Claims Mapping Policy(声明映射策略)**来将其注入到ID令牌中。

具体操作步骤

1. 确认自定义安全属性的权限配置

首先确保你的应用服务主体拥有读取该自定义安全属性的权限:

  • 登录Azure门户,进入Azure Active Directory > 自定义安全属性。
  • 找到包含customerid的属性集,进入权限标签页。
  • 添加你的应用服务主体,并授予读取权限。

2. 获取自定义安全属性的目录扩展名称

自定义安全属性在Azure AD中的实际存储名称格式为extension_<属性集ID>_<属性名>(使用下划线分隔,而非点)。比如你提到的b2c.customerid对应的目录扩展名称应为extension_b2c_customerid。

  • 可通过Graph API查询确认:
GET https://graph.microsoft.com/v1.0/directory/extensionProperties

在返回结果中找到对应属性的name字段值。

3. 创建Claims Mapping Policy

使用PowerShell或Graph API创建策略,将自定义属性映射到ID令牌的customerid声明中:

PowerShell示例:

# 连接Azure AD
Connect-AzureAD

# 定义策略内容
$policyDefinition = @'
{
    "ClaimsMappingPolicy": {
        "Version": 1,
        "IncludeBasicClaimSet": "true",
        "ClaimsSchema": [
            {
                "Source": "user",
                "ID": "extension_b2c_customerid",
                "JwtClaimType": "customerid"
            }
        ]
    }
}
'@

# 创建策略
$policy = New-AzureADPolicy -Definition $policyDefinition -DisplayName "CustomerID-IDToken-Policy" -Type "ClaimsMappingPolicy"

4. 将策略分配给应用服务主体

把创建好的策略绑定到你的应用服务主体上:

# 替换为你的应用服务主体ID
Add-AzureADServicePrincipalPolicy -Id "<应用服务主体ID>" -RefObjectId $policy.Id

5. 更新应用清单(可选但推荐)

在应用清单中保留optionalClaims配置(移除错误的source字段):

"optionalClaims": {
    "idToken": [
        {
            "name": "customerid",
            "essential": false
        }
    ]
}

原配置失败原因

你之前的配置中使用source: "b2c.customerid"是错误的——Azure AD的optionalClaims的source字段仅支持默认的用户属性源(如user、extension等),无法直接引用自定义安全属性的名称格式,必须通过Claims Mapping Policy来完成映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:34:51