如何在Entra ID(Azure)的SAML令牌中添加IsManaged受限声明
解决方案:在Entra ID SAML令牌中添加设备托管状态声明
一、直接添加受限声明的可行流程
你提到的http://schemas.microsoft.com/2012/01/devicecontext/claims/ismanaged属于Entra ID的受限声明集合,无法通过常规UI配置添加,但可通过Microsoft Graph API实现:
获取目标应用的服务主体ID
调用Graph API查询Workday对应的服务主体:GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq '你的Workday应用名称'提取返回结果中的
id字段(服务主体ID)。创建自定义声明映射策略
若没有现有策略,先调用POST /policies/claimsMappingPolicies创建新策略,请求体示例:{ "definition": [ "{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\",\"ClaimsSchema\":[{\"Source\":\"device\",\"SourceName\":\"isManaged\",\"Name\":\"http://schemas.microsoft.com/2012/01/devicecontext/claims/ismanaged\",\"SamlClaimType\":\"http://schemas.microsoft.com/2012/01/devicecontext/claims/ismanaged\"}]}}" ], "displayName": "Workday设备托管声明策略", "isOrganizationDefault": false }保存返回的策略ID。
绑定策略到Workday服务主体
调用PATCH API将策略关联到目标应用:PATCH https://graph.microsoft.com/v1.0/servicePrincipals/{服务主体ID} Content-Type: application/json { "claimsMappingPolicies@odata.bind": [ "https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/{自定义策略ID}" ] }
二、替代方案:间接传递设备托管状态
如果不想使用Graph API,可通过以下两种方式实现:
1. 用户自定义属性映射
- 提前创建用户自定义扩展属性(如
extension_xxxxxx_isManaged),通过Entra ID设备同步或Graph API,将设备的isManaged值同步到该用户属性。 - 在Entra ID的Workday应用「用户属性和声明」页面,添加自定义声明,将该用户属性映射到Workday要求的SAML属性名称(例如Workday文档指定的
IDP_ManagedDevice)。
2. 声明转换规则
- 在Entra ID企业应用的「用户属性和声明」页面,点击「添加转换声明」。
- 选择规则类型为「转换现有声明」,基于
deviceId等设备相关声明,通过逻辑判断输出设备托管状态(如true/false),映射为Workday需要的属性。
注意事项
- 仅当用户从Entra ID托管/注册设备登录时,才能获取有效的
isManaged值。 - 配置完成后,使用SAML跟踪工具验证令牌中是否包含目标声明。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

