如何从MobileServiceUser获取用户名、邮箱等?

How to get user name, email, etc. from MobileServiceUser?

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

我想获取用户的显示名称以供使用,但我不知道该怎么做。

这是 Azure Active Directory 的用户 ID。您需要创建一个服务以通过服务公开您的 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;

这会给你 access token 和 objectID ,然后你需要通过 AAD graphy API 查询信息。 https://msdn.microsoft.com/library/azure/dn151678.aspx 查看示例请求部分。您应该为查询提供您获得的访问令牌和 objectId。

这是另一种方法,在阅读 http://justazure.com/azure-active-directory-part-2-building-web-applications-azure-ad/ 后滚动到有关 .Net 中的身份的部分,它讨论了声明如何成为框架的标准部分。因此,一旦您获得了 @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];
}

我这样做是为了提取在 table 中交叉引用的用户 ID。仅供参考,我正在使用应用服务,但我相信移动服务中的凭据对象是相同的