AcquireTokenAsync 为 User.DisplayableId 返回 null

AcquireTokenAsync returning null for User.DisplayableId

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

这是我对 AcquireTokenAsync 的调用:

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

我选择了我的申请声明:

每个提供商的登录都成功,但我没有按需要取回电子邮件地址。

在朋友的帮助下,我发现虽然用户字段中的值是使用 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 包含用户的电子邮件地址。