从Azure AD中获取用户的令牌主题标识符(子)

gye*_*gye 5 active-directory identifier azure oauth-2.0

我的网络应用程序正在使用多个OAuth 2.0身份提供程序,并且希望从访问令牌响应的id_token中检索“ sub ”并将其与我应用数据库中存储的一个进行匹配,因为“ sub ”在任何系统上都是唯一的id用户所在的位置,它是id_token中的一个标准字段。

我的问题是:有没有一种明显/便捷的方法可从Azure AD门户中检索用户的令牌主题标识符(又名sub)?我知道“ 对象ID ”(aka Object Identifieroid)是Azure AD门户用户配置文件的一部分。但是,“ oid ”不是JWT id_token中的标准字段(例如,Azure AD使用它,但Google Identity不使用),而“ sub ”是。

Ara*_*ram 5

在Azure管理门户中,您只能看到Active Directory中用户的对象ID。

在此处输入图片说明

但是在C#代码中,如果您拥有该用户的JWT令牌,则可以按以下方式对其进行解码,并从中获取所需的任何属性:

var token = new JwtSecurityToken(jwtToken);
var oid = token.Claims.FirstOrDefault(m=>m.Type == "oid").Value;
var sub = token.Claims.FirstOrDefault(m => m.Type == "sub").Value;
Run Code Online (Sandbox Code Playgroud)

但是,如果您没有用户名密码,则无法从AAD获得他们的JWT令牌。

另外,您可以使用AAD Graph API从AAD获取更多详细的用户信息,但是即使Azure Graph API在响应中也不会包含“ SUB”,而仅具有对象ID:

https://msdn.microsoft.com/zh-CN/library/azure/dn151678.aspx

这是GET用户使用AAD图调用的响应:

{
    "odata.metadata": "https://graph.windows.net/contoso.onmicrosoft.com/$metadata#directoryObjects/Microsoft.WindowsAzure.ActiveDirectory.User/@Element",
    "odata.type": "Microsoft.WindowsAzure.ActiveDirectory.User",
    "objectType": "User",
    "objectId": "4e971521-101a-4311-94f4-0917d7218b4e",
    "accountEnabled": true,
    "assignedLicenses": [],
    "assignedPlans": [],
    "city": null,
    "country": null,
    "department": null,
    "dirSyncEnabled": null,
    "displayName": "Alex Wu",
    "facsimileTelephoneNumber": null,
    "givenName": null,
    "jobTitle": null,
    "lastDirSyncTime": null,
    "mail": null,
    "mailNickname": "AlexW",
    "mobile": null,
    "otherMails": [],
    "passwordPolicies": null,
    "passwordProfile": null,
    "physicalDeliveryOfficeName": null,
    "postalCode": null,
    "preferredLanguage": null,
    "provisionedPlans": [],
    "provisioningErrors": [],
    "proxyAddresses": [],
    "state": null,
    "streetAddress": null,
    "surname": null,
    "telephoneNumber": null,
    "usageLocation": null,
    "userPrincipalName": "Alex@contoso.onmicrosoft.com"
}
Run Code Online (Sandbox Code Playgroud)

  • 这并不能回答问题。 (4认同)