如何设置UserTokenProvider令牌过期

本文关键字:UserTokenProvider 令牌 过期 设置 何设置 | 更新日期: 2023-09-27 18:25:19

我们正在开发一个新的ASP.NET MVC 4.1应用程序。我们正在连接ASP.NET Identity,并且正在为密码重置和新邀请的令牌而苦苦挣扎。我似乎找不到一种方法来设置生成的代币的到期时间,默认情况下似乎设置为10分钟左右。我们使用EmailTokenProvider作为用户令牌提供程序,因为它似乎可以很好地与用户上的安全戳配合使用。

我们如何设置令牌的过期时间?理想情况下,我们希望对邀请和重置密码令牌进行不同的设置。

我们的用户管理器是这样的:

var manager = new UserManager<User, long>(new UserStore(new UserRepository()));
manager.UserValidator = new UserValidator<User, long>(manager) {AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true};
manager.UserTokenProvider = new EmailTokenProvider<User, long>();

当用户请求重置密码链接时,我们称之为

var token = await _userManager.GeneratePasswordResetTokenAsync(user.Id);来获取令牌,并将其传递给用户。

当邀请用户时,我们称之为:

var token = await _userManager.GenerateUserTokenAsync("FirstLogin", user.Id);

获取令牌并发送。

如何设置UserTokenProvider令牌过期

2.0中令牌提供程序的默认实现不允许更改令牌过期,这是我们正在考虑的身份3.0。

如果我能很好地理解您的问题,以下内容可能会有所帮助:

    private static string CalculateToken(User user)
    {
        byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
        byte[] key = BitConverter.GetBytes(user.ID);
        string token = Convert.ToBase64String(time.Concat(key).ToArray());
        return token;
    }

然后:

   DateTime time = DateTime.FromBinary(BitConverter.ToInt64(data, 0));
   int id = BitConverter.ToInt32(data, 8);
   if (time< DateTime.UtcNow.AddMinutes(-10) || user.ID != id)
            {
                //too old or IDs not matching
            }
相关文章:
  • 没有找到相关文章