我们正在开发一个新的ASP.NET MVC 4.1应用程序。我们正在连接ASP.NET身份的东西,我们正在努力使用令牌进行密码重置和新邀请。我似乎无法找到一种方法来设置生成的令牌的到期时间,默认情况下似乎设置为大约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);
获取令牌,然后发送。
答案 0 :(得分:2)
2.0中令牌提供程序的默认实现不允许您更改令牌过期,这是我们正在考虑的身份3.0。
答案 1 :(得分:1)
如果我理解你的问题,可以提供以下帮助:
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
}