代码之家  ›  专栏  ›  技术社区  ›  Mark Snyder

AcquireTokenAsync为用户返回null。可显示ID

  •  1
  • Mark Snyder  · 技术社区  · 7 年前

    我正在开发一个使用Azure AD B2C的Xamarin应用程序,我在从任何提供商获取数据时遇到了一些问题。 尽管我将LinkedIn、Google、Microsoft、Facebook和Twitter设置为身份提供者,并且它们似乎配置正确,但返回的唯一数据是用户。标识提供程序。两个用户。名称和用户。DisplayableId为空。所有提供者都会发生这种情况。

    下面是我对AcquireTokenAsync的调用:

    var result = await App.AuthenticationClient.AcquireTokenAsync(Constants.Scopes, user, UIBehavior.SelectAccount, string.Empty, null, Constants.Authority, App.UiParent);
    

    我已选择我的申请声明:

    enter image description here

    在每个提供商上登录都成功,但我没有得到我需要的电子邮件地址。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mark Snyder    7 年前

    在朋友的帮助下,我发现虽然用户字段中的值是使用Azure AD返回的,但Azure AD B2C调用的响应会填充IdToken字段。

    进一步的侦查发现这是一个序列化的JwtSecurityToken对象。这让我找到了以下代码:

    var displayableId = ""; // result.User.DisplayableId;
    var token = new JwtSecurityToken(result.IdToken);
    foreach (var claim in token.Claims)
    {
        if (claim.Type == "emails")
        {
            displayableId = claim.Value;
        }
    }
    

    现在displayableId包含用户的电子邮件地址。