如何编程获取个人Microsoft账户ID(对应Entra的issuerAssignedId)
获取个人Microsoft账户的联合身份ID用于Entra用户创建
要获取Entra中联合身份用户的issuerAssignedId(对应https://login.live.com发行者的那个值),你可以通过以下两种方式实现:
1. 从OIDC认证的ID Token中提取sub声明
当引导个人Microsoft账户(MSA)用户完成OIDC认证流程时,确保请求的scope包含openid。认证成功后,你会收到一个JWT格式的ID Token,解码该Token后,其中的sub字段就是你需要的issuerAssignedId值。
示例解码后的ID Token片段:
{ "sub": "AAAAAAAAAAAAAAAAAAAAAskdfnmlskdhfsldfsdjfb", "iss": "https://login.live.com", // 其他声明... }
这个sub值是MSA针对你的应用的唯一固定标识符,与Entra自动创建用户时填充的issuerAssignedId完全一致。
2. 调用Microsoft Graph API获取MSA的Object ID
如果你需要通过API直接获取该ID,可以在用户用MSA登录后,使用针对MS Graph的访问令牌调用GET /me接口。此时返回的id字段就是MSA的全局唯一Object ID,同样对应Entra中的issuerAssignedId。
注意:确保你的Entra应用已配置为支持个人Microsoft账户登录,并且获取访问令牌时指定的资源为https://graph.microsoft.com,同时请求的scope包含User.Read。调用返回的示例响应:
{ "id": "AAAAAAAAAAAAAAAAAAAAAskdfnmlskdhfsldfsdjfb", "userPrincipalName": "xxx@hotmail.com", // 其他用户信息... }
如果之前调用/me返回的是Entra相关的ID,大概率是因为你使用的是针对Entra租户的访问令牌,而非针对MS Graph的MSA令牌。调整认证请求的资源和scope即可解决这个问题。
内容的提问来源于stack exchange,提问作者Muon3948729348792
相关产品推荐
相关产品推荐

