首页 > 解决方案 > Azure 应用服务处理编码加号登录 URL 错误

问题描述

我有一个使用 ASP.NET Core Identity 进行用户管理的 ASP.NET Core 2.1 应用程序。如果有人忘记了密码,我会使用 Identity SDK 生成密码重置令牌。然后我将链接邮寄给用户以重置他们的密码。链接如下所示:

https://mywebsite.com/account/resetpassword/{resetToken}

在“{resetToken}”的位置,我放置了 Identity SDK 为我生成的重置令牌的 URL 编码版本。URL 编码是必要的,因为令牌可能包含特殊字符。

在我的本地机器上测试忘记密码流程时,一切正常,因此在代码审查后,我将其发布到我们在 Azure 中的测试环境中。但是在 Azure 上进行测试时,当我尝试访问密码重置链接时,我得到了 404。生成的链接如下所示:

https://mywebsite.com/account/resetpassword/CfDJ8OdSMUPTC9lCpLB%2fYMsf17DY75oSHdCdv4KL9RTOxbAP2ukPYdX1oY8rh5A%2bRO4p3j8uBVhtSRedi1AoPxVCvNigrcSltViBkCrU9dKRM3YKrE%2fCqPRvZcP%2b9aGdadnnQlFM%2b%2bhcJ8LJHtkmEcEoTkCC0MMfNR3ttDM7L2%2boK1MhKuaqxKKeYH6iyAeK6sJe5g%3d%3d

在对 URL 进行了一番摆弄之后,我得出的结论是编码的 + 符号 (%2b) 出了点问题。因为如果我从 URL 中删除它,它会成功将我带到重置密码页面,但显然会抛出错误,因为令牌无效。

部分接收操作方法如下所示:

[HttpGet]
[Route("[controller]/[action]/{*resetToken}")]
public IActionResult ResetPassword(string resetToken)

我做错了什么还是 Azure 处理 URL 的方式不是我的本地机器?

标签: c#.netazureasp.net-coreasp.net-identity

解决方案


推荐阅读