我的应用程序中的安全性工作正常,除非用户尝试使用电子邮件中的“+”登录。
访问 token 看起来不错(当电子邮件包含 + 时,它看起来像这样):
Bearer 8BGpt_KkEp-_6U5tUdKqK1xLCQBaWzHcxDT9RRKkbzoF2fHCUNhRL3U-fpLdQIuSXm8RcTOH4ZY3a0UZH6-6IgXxx_ojgyL26179JovRm5xQSZD7ANxLvvdU3ubfcpzSr4tw-sza37UaJh7xDFB8eH0NA9Djt7Ik8Ebxdin7u-n76InCulRAV6xMWgXfF9bwoU8MsV3lrh_zhnxYGnx3O7QUNQ740NUJLHJYH12rBth16CA1AXSF86rA5rUB7vJ7yK09k_FJTifyuldTeFHJHsyscnEIQxGozbf3x1cmZowkiK4Q1r8W0M8uz25m8j_tuMrWawTqYJNZiTuI9afW38WWQ4BRLkQF7TwoMOgZQ-f1K_3W8Zy3x-OsKdQS4i9CapvKe1utCscZVroByvyD9SvpILGiZGTjGD_zCAm8KerMPT5GNOb07kPGV_167PHEXm0TGaJbCelb5gLgXbMXv3GxBQLnYIfPUXCBaKx4UFkY8kFMPs9MxFcGY81p67rfnjeswBZ3PW6fDFTf9U_I8g
但是,当我尝试使用此访问 token 发送安全请求时,我收到响应:
status: 401
"{"Message":"Authorization has been denied for this request."}"
如上所述,如果我删除加号,它就可以正常工作。这似乎是 Wep API 问题而不是 Angular 问题。
我发现encodeUrl和decodeUrl方法不能阻止空格变为加号。我在 C# 代码中尝试了以下将空格切换为加号:
var registerEmail = model.email.Replace(' ', '+');
这用于登录和注册操作。
也许在 Web API 2 的 OAuth 中无法在电子邮件中使用 + ?
最佳答案
这似乎是 ASP.NET Angular 色中的一个错误。我不确定是否有明确的解决方案。但是,目前,在将用户名存储到寄存器之前和登录时,按如下方式对用户名进行编码:
public static class UsernameEncodingService
{
public static string returnEncodedUsername(string email)
{
var emailAsLower = email.ToLowerInvariant();
var encodedEmail = Base64Encode(emailAsLower);
var encodedEmailWithoutEquals = encodedEmail.Replace("=", "213");
var encodedEmailWithoutPlus = encodedEmailWithoutEquals.Replace("+", "214");
return encodedEmailWithoutEquals;
}
private static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
}
关于angularjs - 如果电子邮件地址中包含 '+',则 Angular 向 Asp.net Web API 发送访问 token 将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324331/