如何从MobileServiceUser获取用户名,电子邮件等?

时间:2015-04-26 22:14:00

标签: c# wpf azure azure-mobile-services azure-active-directory

经过大量挖掘后,我的WPF应用程序通过Azure移动服务签署了用户。我的移动服务已连接到我已设置的Azure Active Directory。但是,当我使用MobileServiceClient.LoginAsync(...)登录用户时,MobileServiceUser UserId似乎是一个不可读的哈希。例如,它看起来像:" Aad:X3pvh6mmo2AgTyHdCA3Hwn6uBy91rXXXXXXXXXX"。到底是什么?

我想抓住用户的显示名称,但我无法弄清楚如何使用。

2 个答案:

答案 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,但我相信凭证对象在移动服务中是相同的