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

微软账户User的id与ID Token中oid是否为同一标识?

如何判断微软个人账户的Graph API ID与ID Token OID是否属于同一用户

在Azure AD内部用户中,User对象的id和ID Token里的oid是完全一致的,但微软个人账户(Microsoft Account)的情况特殊:调用Graph API的/me接口返回的id是短字符串(如0123456789abcdef),而同一用户ID Token中的oid是UUID格式(如00000000-0000-0000-0123-456789abcdef)。

这两个ID确实属于同一用户,可以通过以下两种方式验证:

1. 字符串格式匹配验证

微软个人账户的Graph API返回的id,本质是ID Token中oid去掉所有连字符(-)后的最后16个字符。
以你提供的示例为例:

  • OID去掉连字符后:00000000000000000123456789abcdef
  • 截取最后16位:0123456789abcdef,正好和Graph返回的id完全一致。

你可以通过代码实现这个逻辑:先移除OID中的所有-,再取末尾16位,与Graph的id比对,若相同则为同一用户。

2. 关联字段交叉验证

ID Token中的preferred_username(或email)字段,与Graph API返回的userPrincipalName(或mail,若存在)字段值完全一致,也可以通过这些字段的匹配来辅助确认是同一用户。

示例参考

Graph API /me接口返回结果:

$ curl https://graph.microsoft.com/v1.0/users/me -H 'Authorization: Bearer ...' | jq .
{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
  "displayName": "",
  "surname": "",
  "givenName": "",
  "id": "0123456789abcdef",
  "userPrincipalName": "user@example.com",
  "businessPhones": [],
  "jobTitle": null,
  "mail": null,
  "mobilePhone": null,
  "officeLocation": null,
  "preferredLanguage": null
}

ID Token内容:

{
  "ver": "2.0",
  "iss": "https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0",
  "sub": "...",
  "aud": "xxxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx",
  "exp": 1668257519,
  "iat": 1668170819,
  "nbf": 1668170819,
  "preferred_username": "user@example.com",
  "oid": "00000000-0000-0000-0123-456789abcdef",
  "email": "user@example.com",
  "tid": "xxxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx",
  "nonce": "...",
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:35:19