我正在开发一个使用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);
我已选择了我的申请声明:
每个提供商的登录都会成功,但我没有收到我想要的电子邮件地址。
答案 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包含用户的电子邮件地址。