经过大量挖掘后,我的WPF应用程序通过Azure移动服务签署了用户。我的移动服务已连接到我已设置的Azure Active Directory。但是,当我使用MobileServiceClient.LoginAsync(...)登录用户时,MobileServiceUser UserId似乎是一个不可读的哈希。例如,它看起来像:" Aad:X3pvh6mmo2AgTyHdCA3Hwn6uBy91rXXXXXXXXXX"。到底是什么?
我想抓住用户的显示名称,但我无法弄清楚如何使用。
答案 0 :(得分:3)
这是Azure Active Directory的用户标识。您需要创建服务以通过服务公开您的AAD信息,并使用您从用户处获得的访问令牌检索其他信息。
首先:
ServiceUser user = this.User as ServiceUser;
var identities = await user.GetIdentitiesAsync();
var aad = identities.OfType<AzureActiveDirectoryCredentials>().FirstOrDefault();
var aadAccessToken = aad.AccessToken;
var aadObjectId = aad.ObjectId;
这将为您提供访问令牌和objectID,然后您需要通过AAD graphy API查询信息。 https://msdn.microsoft.com/library/azure/dn151678.aspx 查看示例请求部分。您应该使用您获得的访问令牌和objectId提供查询。
答案 1 :(得分:0)
这是另一种方法,在阅读http://justazure.com/azure-active-directory-part-2-building-web-applications-azure-ad/之后滚动到.Net中的Identity部分,它讨论了声明如何成为框架的标准部分。所以一旦你获得了像@beast
提供的凭证对象var aad = identities.OfType<AzureActiveDirectoryCredentials>().FirstOrDefault();
您实际上可以使用各种属性获取字典。某些属性的示例可以在https://msdn.microsoft.com/en-us/library/system.identitymodel.claims.claimtypes(v=vs.110).aspx
找到所以从那里你可以做到以下几点:
if (aad != null)
{
var d = aad.Claims;
var email = d[ClaimTypes.Email];
}
我这样做是为了提取在表中交叉引用的用户ID。仅供参考我正在使用App Service,但我相信凭证对象在移动服务中是相同的