asp.net - 在 Azure 上接收神奇的登录链接而不允许双重转义
问题描述
尝试在 Asp.net core 2.1 Web 应用程序上实现魔术链接登录。在本地工作就像一个魅力,但是当部署到 Azure 时,我收到一条错误消息:`请求包含双转义序列并且请求过滤在 Web 服务器上配置为拒绝双转义序列
MagicLinkSender.cs
var token = await _userManager.GenerateUserTokenAsync(
user: user,
tokenProvider: "MagicLinkTokenProvider",
purpose: "magic-link"
);
var magiclink = _urlHelper.Link(
routeName: "MagicLinkRoute",
values: new { userid = user.Id, token = token, });
帐户控制器
[HttpGet("/magic/{userid}/{token}", Name = "MagicLinkRoute")]
public async Task<IActionResult> MagicLogin([FromRoute]string userid, [FromRoute]string token )
{
// Sign the user out if they're signed in
if(_signInManager.IsSignedIn(User))
{
await _signInManager.SignOutAsync();
}
var user = await _signInManager.UserManager.FindByIdAsync(userid);
if(user != null)
{
token = token.Replace("%2F", "/");
var isValid = await _signInManager.UserManager.VerifyUserTokenAsync(
user: user,
tokenProvider: "MagicLinkTokenProvider",
purpose: "magic-link",
token: token
);
if(isValid)
{
await _signInManager.UserManager.UpdateSecurityStampAsync(user);
await _signInManager.SignInAsync(user, isPersistent: true);
}
}
return RedirectToPage("/Profile/Index");
}
似乎我可以通过在 web.config 中允许 doublescaping 来解决这个问题:
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
然而,这似乎打开了一些安全漏洞。是否有更好的选择可以在 Azure 上运行?
解决方案
根据您的托管环境,某些字符需要额外配置:
要在 ASP.NET 2.0 和 4.0 中允许在项目名称中使用“+”,请在 web.config 文件中设置配置。
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
要在 ASP.NET 4.0 中允许“&”和“%”,请在 web.config 文件中设置配置。
<system.web>
<httpRuntime requestPathInvalidCharacters=""/>
</system.web>
要允许在 ASP.NET 4.0 中使用尾随点 ('.'),请在 web.config 文件中设置配置。
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
</system.web>
有关更多详细信息,您可以参考这篇文章和这篇文章。
推荐阅读
- php - 如何将循环给出的数据存储在数组中 [PHP]
- node.js - Firefox 上 api 请求的 Angular 4 问题
- sql - 如何进行此查询:“查找哪种类型的销量高于其他类型?”
- dialogflow-es - 如何限制diagflow中的范围
- elasticsearch - 在elasticsearch中编写查询,使用自定义模式分析器和普通全文搜索搜索字段(IP_address)?
- c# - UWP 用户友好的方式来检查用户是否仅授予相机权限
- rcpp - 链接到另一个包 - 未定义的符号
- html - mvc 视图只显示 json 而不是 HTML
- java - 异常完成 CompletableFuture
- java - 点击监听器在第二次点击中工作