AcquireTokenAsync为User.DisplayableId返回null

时间:2018-03-09 21:56:46

标签: xamarin.forms azure-ad-b2c

我正在开发一个使用Azure AD B2C的Xamarin应用程序,我在从任何提供商处获取数据时遇到一些麻烦。 即使我将LinkedIn,Google,Microsoft,Facebook和Twitter设置为身份提供商,并且它们似乎配置正确,但返回的唯一数据是User.IdentityProvider。 User.Name和User.DisplayableId都为null。这种情况发生在所有提供商身上。

这是我对AcquireTokenAsync的调用:

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

我已选择了我的申请声明:

enter image description here

每个提供商的登录都会成功,但我没有收到我想要的电子邮件地址。

1 个答案:

答案 0 :(得分:1)

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