gpt4 book ai didi

c# - 如何从 Azure AD B2C 删除电子邮件声明中的括号

转载 作者:行者123 更新时间:2023-11-30 20:28:29 25 4
gpt4 key购买 nike

我正在尝试删除从 Azure AD B2C 获取的 email 声明中的括号。

用户登录后,我解码用户的 token 并从中获取电子邮件。但是我收到的电子邮件中有括号。电子邮件看起来像这样 ["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/ 解码 token 时它返回相同的带括号的电子邮件。有人经历过吗?

这是来自 jwt.io enter image description here 的有效负载

您可以看到名称和电子邮件之间的区别。电子邮件有这样的括号 [ ] 我想知道的是如何删除这些括号并使其像名称一样。因为当我收到 Xamarin 表单中的电子邮件时,它也有这些括号,所以不是 emailname@gmail.com 而是这样 ["emailname@gmail.com"]

最佳答案

在 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);
}

关于c# - 如何从 Azure AD B2C 删除电子邮件声明中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47320969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com