ASP.NET 身份确认令牌长得可笑 - 有什么办法可以缩短它?

Chr*_*uer 5 asp.net asp.net-identity

我正在使用此代码生成密码重置链接:

    private async Task<string> GetNewEmailConfirmationLink(ApplicationUser user)
    {
        var code = await this.UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
        var callbackUrl = Url.Action(
           "ConfirmEmail",
           "Account",
           new { userId = user.Id, code = code },
           protocol: Request.Url.Scheme);
        return callbackUrl;
    }
Run Code Online (Sandbox Code Playgroud)

原则上,这段代码工作得很好 - 但生成的链接非常长。虽然安全,但有时需要复制粘贴此链接等,然后它的长度往往会导致错误(忘记元素等)。有没有办法缩短这个?

一个生成的链路为例如: http://example.com:9999/de-DE/Account.aspx/ConfirmEmail?userId=1f4f605a-1be5-4b79-9fb0-139687fe8edc&code=0AjkI5qK917WkZw%2Bz0nXf1uK%2BK9bvYAK6BNEVM2l%2Fc%2BlBYOIiitrQ0gMUrB96CCNYc11hnpNpp2Wg2buC548mAb8l9JwzcwfuOiMAXiwJ%2F3iDH1LlXWgiLW% 2FXxcVqLEs2hIhvmye2%2FJxQZD3RcODyNyGD%2FnWjrJRoFK%2B16FtyrtimfNRL%2F1L9vgrk5HiWENn

Hor*_*Net 3

我想到有两种方法可以实现这一目标。

一是缩短生成的代码本身。这意味着您提供一个较短的版本(从原始代码生成)并将其用于所有用户交互。在确认用户的电子邮件地址之前,您将链接转换为其原始表示形式。

另一种选择是实现IUserTokeProvider创建您自己的令牌。