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

如何从Microsoft Graph获取domain\username格式的用户登录标识?

我之前在把企业应用从本地Windows认证迁移到Azure AD的时候,正好踩过这个坑!原来我们也是用domain\username作为用户唯一标识来匹配数据库信息,切换到Azure AD后,默认返回的用户标识是邮箱格式,一开始调用Graph API也没拿到想要的格式,后来才搞清楚问题所在,给你整理下解决方案:

获取Azure AD用户的domain\username格式标识
  • 先确认用户来源
    如果你的用户是从本地Active Directory同步到Azure AD的,那Azure AD会保留原本地AD的域账号属性,这是我们拿到目标格式的核心依据。如果是纯Azure AD创建的云用户,没有本地AD同步的话,就需要换一种方式构造(后面会说)。

  • 调用Graph API时选对属性
    你之前的请求没拿到想要的结果,是因为默认返回的用户属性集合里不包含本地AD同步过来的字段,必须显式用$select参数指定以下两个属性:

    • onPremisesSamAccountName:对应原本地AD里的用户名(比如john.doe)
    • onPremisesDomainName:对应原本地AD的域名(比如contoso)

    正确的API请求示例:

    GET https://graph.microsoft.com/v1.0/users/{user-email-or-id}?$select=onPremisesSamAccountName,onPremisesDomainName
    

    拿到返回结果后,把这两个字段拼接起来就是你需要的domain\username格式:{onPremisesDomainName}\{onPremisesSamAccountName}。

  • 纯云用户的处理方案
    如果是纯Azure AD创建的用户(没有本地AD同步记录),没有onPremises*系列属性,这时候可以从userPrincipalName字段来构造。比如用户的UPN是first.last@domain.com,你可以拆分出域名部分(比如取domain而非完整的domain.com)和用户名部分,拼接成domain\first.last——具体拆分规则可以根据你的业务需求调整。

  • 权限注意点
    别忘了确保你的Azure AD应用已经被授予了足够的Graph API权限,比如User.Read(读取当前用户信息)或者User.ReadBasic.All(读取所有用户的基本信息),否则会因权限不足无法获取这些属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:23:11