首页 > 解决方案 > 默认 AspCore 重置令牌包含非法字符?

问题描述

我正在尝试使用自定义 blazor 页面设置重置令牌。令牌生成工作得很好,使用

            var code = await _userManager.GeneratePasswordResetTokenAsync(user);

它生成了以下代码

CfDJ8HVZ73lJc0lGiTBiTdeoRRd//Zc1LM0Q4P+8t7DLaBzwlQ2DuvY2HQ5CWE/E8b3VdlZZYIelpwwrCFz579CeCcQTf+YIPli7KpPTuUpMcTHDs5pAw3XifV7x+5Y/Q6WAPdixXuHE8We9QQRxl7Hnba2vjoJ5fCZ9FMHKpkOq3mxDhgYi/gba2Vse3/R87ztVrisEguYvYQ8h5f2MAVMiCB+H0TakjKjpj2ANAD9wQ2H8

通过邮件发送它需要编码,可以在这个链接中看到,给我

            var callbackUrl = _globals.AppUrl
            + "/user/reset/"
            + System.Web.HttpUtility.UrlEncode(code);

现在邮件发送成功,URL 编码成功。但是,打开页面时,我收到 404.11 错误

The request filtering module is configured to deny a request that contains a double escape sequence.

页面声明:

@page "/user/reset/{Code}"

示例网址:

https://localhost:44303/user/reset/CfDJ8HVZ73lJc0lGiTBiTdeoRRfumtSdRgb46HPXLklW0j42IyjqN8rv%2fapJG158YfIrR7dVRNRF2YxJydegd2CMlvm93FTcjkuBwnVPC3N9AtSigiy8VOqeW1nNrRth73urJ23D0V6M2c%2fzE1%2bTuFs8KbB%2fnCG5CE3UnFXG5HleeA%2fwtlyzLgbP4Zrbi5XZ4Q0w4%2b1j83J%2fXvQUqg%2fO5raSkmcO3cb1TGnDWz%2fwqxW%2fbNOe

问题

ASP Core Identity 是否包含默认无法通过电子邮件发送的字符?(我假设是 '+' 字符)。我们可以从世代中排除吗?或者是否有另一种方法来操作防止此错误的 URL。我更喜欢打开双转义字符过滤器,因为它可以提高安全性

编辑

对整个 url 进行如下编码时:

        var callbackUrl = _globals.AppUrl
            + "/user/reset/"
            + code;
        callbackUrl = HtmlEncoder.Default.Encode(callbackUrl);

出现404错误,因为代码中包含'/',不符合我的路由

标签: c#asp.netasp.net-coreasp.net-identity

解决方案


var callbackUrl =
            _globals.AppUrl
            + "/user/reset/"
            + code;
        **callbackUrl = HtmlEncoder.Default.Encode(callbackUrl);**

**Update for this**

 var callbackUrl = _globals.AppUrl
            + "/user/reset/"
            + code;
        **callbackUrl = {callbackUrl};**

推荐阅读