我正在使用OpenId Connect构建基于Azure Active Directory的用户身份验证。 我可以通过在AAD中使用我的帐户成功登录我的网站。 我登录后,我想通过AAD图API检索我的帐户信息。
我可以通过ClaimsIdentity获取用户ID:
ClaimsIdentity identity = this.User.Identity as ClaimsIdentity;
string userID = identity.GetUserId();
我可以通过图表API获取用户信息:
public IUser GetProfileById(string userID)
{
ActiveDirectoryClient client = GetAadClient();
var user = client.Users.Where(x => x.ObjectId == userID).ExecuteSingleAsync().Result;
return user;
}
但是,存储在ClaimsPrincipal上的用户ID似乎不是AAD中的对象ID,因此我需要找到一些其他方法来检索用户信息。另一个选择可能是根据电子邮件地址找到用户,但我也无法找到如何做到这一点。 任何帮助或建议将不胜感激。
答案 0 :(得分:2)
感谢@juunas我找到了类型:
ClaimsIdentity identity = this.User.Identity as ClaimsIdentity;
string objectID = identity.Claims.FirstOrDefault(x => x.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;
然后,对象ID可用于通过AAD图API获取用户信息。
答案 1 :(得分:0)
对于其他仍在寻找的人,这是一个快速的答案。
public void GetUserFromAD(GraphServiceClient gsc)
{
try
{
ClaimsIdentity identity = ClaimsPrincipal.Current.Identity as ClaimsIdentity;
string objectID = identity.Claims.FirstOrDefault(x => x.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;
var user = gsc.Users[objectID].Request().GetAsync().Result;
}
catch(Exception ex)
{
// do something.
}
}
请注意,您可以使用Users [objectid]直接查找,而不是通过结果列表枚举。