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 包含用户的电子邮件地址。
我正在开发一个使用 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 包含用户的电子邮件地址。