MVC 5,无效的令牌

Posted

技术标签:

【中文标题】MVC 5,无效的令牌【英文标题】:MVC 5, Invalid Token 【发布时间】:2017-07-04 17:18:45 【问题描述】:

我已经看到这个问题讨论了几次,但我仍然无法解决它。

我的注册流程在 99% 的情况下都运行良好。但是在确认电子邮件地址(通过电子邮件中的链接)时,我偶尔会收到无效令牌错误。我什至现在也在对令牌进行 URL 编码/解码,但我仍然偶尔会遇到错误。

注册操作:

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
code = System.Web.HttpUtility.UrlEncode(code);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new  userId = user.Id, code = code , protocol: Request.Url.Scheme);

并确认操作:

code = System.Web.HttpUtility.UrlDecode(code);
var result = await UserManager.ConfirmEmailAsync(userId, code);

我可以确认每个“失败”的用户都有一个安全印章。并且名称/用户名似乎不包含任何狡猾的字符。

还有什么我可以检查的吗?

【问题讨论】:

你的 web.config 中有 MachineKey 吗? 嗯,不,我没有。我会弄清楚如何添加一个,并让你知道我的进展情况。因为这个问题是间歇性的,我可能需要一段时间才能判断它是否有效。谢谢指点。 令牌的一部分包含 Web 应用程序的名称(在 IIS 中定义),如果您在云中运行它,应用程序重新启动后您可能会得到不同的名称 - 这也可能导致您的问题.但是机器密钥应该修复它。只是为了确认 - 获取令牌,重新启动 IIS,尝试确认令牌,然后对机器密钥执行相同操作。 感谢您的回复 - 会及时通知您! 【参考方案1】:

你可以试试这个代码。

var encodedCode= code.Base64ForUrlEncode();
var decodedCode= encodedCode.Base64ForUrlDecode();

public static class UrlEncoding

        public static string Base64ForUrlEncode(this string str)
        
            byte[] encbuff = Encoding.UTF8.GetBytes(str);
            return HttpServerUtility.UrlTokenEncode(encbuff);
        

        public static string Base64ForUrlDecode(this string str)
        
            byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
            return Encoding.UTF8.GetString(decbuff);
        

【讨论】:

***.com/questions/27535233/… ***.com/questions/28741578/…

以上是关于MVC 5,无效的令牌的主要内容,如果未能解决你的问题,请参考以下文章

身份密码重置令牌无效

使用 ASP.NET 身份重置密码时令牌无效

在 MVC 5 的 cookie 中存储 JWT 令牌

VueJs 前端的无效 CSRF 令牌错误(symfony 5)

如何在某人更改密码后使用户的 JWT 令牌无效

Laravel 5 Uncaught SyntaxError:无效或意外令牌(红点)