如何在Azure门户为Microsoft Entra ID用户添加自定义声明?
操作方法说明
一、先创建自定义用户属性
因为Microsoft Entra ID默认没有ExternalServiceUserId和ExternalServicePassword这两个属性,得先创建目录扩展属性才能在门户编辑:
- 登录Azure门户,进入Microsoft Entra ID > 应用注册,选中你的Web应用(未关联的话先注册一个)。
- 进入应用的扩展属性页面,点击添加扩展属性。
- 分别创建两个属性:
- 名称填
ExternalServiceUserId,类型选字符串,按需勾选是否允许用户自行编辑,保存。 - 名称填
ExternalServicePassword,同样选字符串类型。注意:直接存储密码存在安全风险,后续建议改用Azure密钥保管库,这里先按需求操作。
- 名称填
- 保存后,属性会生成带前缀的完整名称,格式为
extension_<应用客户端ID去掉横杠>_属性名,请记录该名称,后续调用Graph API时需要用到。
二、在门户为用户设置属性值
- 进入Microsoft Entra ID > 用户,找到目标用户(比如User1、User2)。
- 打开用户的配置文件页面,拉到最底部的扩展属性区域,点击编辑。
- 在弹出的属性列表中找到刚创建的两个属性,输入对应的值(比如User1填
"someUserId"和"somePassword"),保存即可。
三、让Web应用登录时获取属性作为声明(可选)
如果需要用户登录Web应用时,这些属性以声明形式出现在SAML/OIDC令牌中,需配置应用的声明映射:
- 回到应用注册页面,进入令牌配置 > 添加声明。
- 选择添加自定义声明,类型选目录扩展,选中你创建的两个属性添加到声明列表,可将声明名称设为与属性名一致,方便识别。
- 保存配置后,用户登录时令牌中就会包含这两个自定义声明。
四、用Microsoft Graph API读取属性值
调用Graph API的用户详情接口,指定要获取的扩展属性即可:
请求示例
GET https://graph.microsoft.com/v1.0/users/{用户ID}?$select=id,displayName,extension_<你的应用客户端ID去横杠>_ExternalServiceUserId,extension_<你的应用客户端ID去横杠>_ExternalServicePassword
响应示例
{ "id": "user1的ID", "displayName": "User1", "extension_xxxxxx_ExternalServiceUserId": "someUserId", "extension_xxxxxx_ExternalServicePassword": "somePassword" }
权限要求
- 委派权限:
User.Read可获取当前登录用户的属性;User.Read.All能读取所有用户的属性。 - 应用权限:需
User.Read.All权限,适合后台服务调用场景。
安全提示
直接将密码存储在用户属性中存在泄露风险,建议将密码存入Azure密钥保管库,用户属性仅存储密钥保管库的密钥ID,后续通过Graph API拿到ID后再从密钥保管库读取密码,提升安全性。
内容的提问来源于stack exchange,提问作者Luka
相关产品推荐
相关产品推荐

