我正在尝试删除我从Azure AD B2C获得的email
声明中的括号。
用户登录后,我解码用户的令牌并从中获取电子邮件。但我收到的电子邮件中有括号。电子邮件看起来像["email@email.com"]
,当我将其保存到数据库时,它会让它变得难看。
是否有一些设置要删除电子邮件声明中的括号?
JObject ParseIdToken(string idToken)
{
// Get the piece with actual user info
idToken = idToken.Split('.')[1];
idToken = Base64UrlDecode(idToken);
return JObject.Parse(idToken);
}
private string Base64UrlDecode(string s)
{
s = s.Replace('-', '+').Replace('_', '/');
s = s.PadRight(s.Length + (4 - s.Length % 4) % 4, '=');
var byteArray = Convert.FromBase64String(s);
var decoded = Encoding.UTF8.GetString(byteArray, 0, byteArray.Count());
return decoded;
}
public void CacheUser(AuthenticationResult ar)
{
JObject user = ParseIdToken(ar.IdToken);
var cache = new CachedUsers
{
FullName = user["name"]?.ToString(),
Email = user["emails"]?.ToString()
};
BlobCache.LocalMachine.InsertObject("usercached", cache);
}
这是我收到电子邮件的代码。为什么电子邮件有括号?我想这个问题不在我的代码中,但也许在Azure AD B2C中有一些设置使它像那样,因为当我尝试从https://jwt.io/解码令牌时,它返回相同的,带有括号的电子邮件。有没有人经历过这个?
的有效负载您可以看到姓名和电子邮件之间的区别。电子邮件的括号如[ ]
,我想知道的是如何删除这些括号并使其像名称一样。因为当我收到Xamarin表单中的电子邮件时,它也有这些括号,而不是emailname@gmail.com
它就像这样["emailname@gmail.com"]
答案 0 :(得分:4)
在JSON中,括号表示数组。请参阅此基本JSON Arrays文档。
虽然不容易通过Azure AD B2C UI公开,但在技术上可以让用户将多个电子邮件链接到他们的帐户,这就是电子邮件声明是阵列的原因。
您看到的字符串显示为["user@email.com"]
的原因是您在JSON数组上调用.ToString()
。您需要修改代码以获取该数组的特定元素,例如,第一个元素:
public void CacheUser(AuthenticationResult ar)
{
JObject user = ParseIdToken(ar.IdToken);
var cache = new CachedUsers
{
FullName = user["name"]?.ToString(),
Email = user["emails"]?.FirstOrDefault()?.ToString()
};
BlobCache.LocalMachine.InsertObject("usercached", cache);
}