angularjs - 如果电子邮件地址中包含 '+',则 Angular 向 Asp.net Web API 发送访问 token 将不起作用

标签 angularjs security oauth asp.net-web-api2

我的应用程序中的安全性工作正常,除非用户尝试使用电子邮件中的“+”登录。

访问 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/

相关文章:

ruby - 关于在 Ruby(非 Rails)中创建 OAuth 提供程序的教程或文档

java - 如何使用动态 URL 匹配器配置配置 Spring security Oauth 2.0?

AngularJS - $scope.$watch 的机制 - 它只是一个观察者模式吗?

javascript - 在文本框内单击时更改文本框的边框颜色

angularjs - 使用索引位置验证字段

c# - 用于上传数据的Web服务 : security considerations

javascript - 如何将外部库附加到 Protractor 配置文件?

security - IPTables 不会立即使用 ipset 阻止 IP

security - mysqldump 安全吗

等待弹出窗口返回的 Javascript 链接