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

如何通过AzureAD账户名在Entra ID中查找对应User实体?

解决方案:通过Graph API映射“AzureAD\UserName”到Entra ID用户实体

核心逻辑

“AzureAD\UserName”格式中的UserName对应Entra ID用户的**userPrincipalName的前缀**(即@符号之前的部分),对于已从本地AD同步的用户,也可匹配onPremisesSamAccountName属性。你可以基于这两个属性构建Graph API查询,定位到对应的用户实体。

具体实现步骤(C# Graph SDK)

1. 提取登录账户中的UserName

先从“AzureAD\JohnSmith”格式的字符串中拆分出核心用户名部分:

string loginAccount = "AzureAD\\JohnSmith";
string userName = loginAccount.Split('\\')[1]; // 得到JohnSmith

2. 构建Graph API查询

使用C# Graph SDK发起查询,同时覆盖云原生用户和同步用户的场景:

using Microsoft.Graph;
using Microsoft.Graph.Models;

// 初始化GraphServiceClient(需提前完成身份验证配置,比如使用ClientCredentialProvider)
var graphClient = new GraphServiceClient(authProvider);

// 构建过滤条件:匹配UPN前缀 或 samAccountName
var users = await graphClient.Users.GetAsync(requestConfiguration =>
{
    requestConfiguration.QueryParameters.Filter = $"startswith(userPrincipalName, '{userName}@') OR onPremisesSamAccountName eq '{userName}'";
    requestConfiguration.QueryParameters.Select = new[] { "id", "displayName", "userPrincipalName", "onPremisesSamAccountName" };
});

// 处理查询结果
if (users?.Value?.Count > 0)
{
    var targetUser = users.Value.First();
    Console.WriteLine($"匹配用户:{targetUser.DisplayName}(ID:{targetUser.Id})");
}
else
{
    Console.WriteLine("未找到对应Entra ID用户");
}

3. 关键注意事项

  • 权限配置:确保应用已获取Entra ID的User.Read.All权限(根据场景选择应用权限或委托权限)。
  • 唯一性处理:若存在同名用户导致UPN前缀重复,建议结合设备ID等额外信息缩小查询范围,避免匹配错误。
  • 云原生用户兼容:纯云用户的onPremisesSamAccountName属性为空,此时仅通过userPrincipalName前缀即可完成匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:03:13