【问题标题】:How to get user name, email, etc. from MobileServiceUser?如何从MobileServiceUser获取用户名、邮箱等?
【发布时间】:2015-04-26 22:13:59
【问题描述】:

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

我想获取用户的显示名称以使用,但我不知道如何使用。

【问题讨论】:

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


    【解决方案1】:

    这是 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;
    

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

    【讨论】:

    • 通过图形 API 查询时,我的访问令牌丢失或格式错误。有什么想法吗?
    • 可能需要比您在此处描述的更多的详细信息。只要您确保请求标头中存在访问令牌,它就应该可以工作。
    • 这个答案中的“this”对象是什么?
    【解决方案2】:

    这是另一种方法,在阅读 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];
    }
    

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

    【讨论】:

      猜你喜欢
      • 2017-12-06
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多