Asp Identity 2 - 更改移动令牌的到期时间

时间:2017-10-12 14:54:53

标签: c# asp.net asp.net-identity token

我有以下代码可确保电子邮件验证令牌的令牌生存期跨度在14天后过期: -

if (Startup.DataProtectionProvider != null)
            {
                IDataProtector dataProtector = Startup.DataProtectionProvider.Create("ASP.NET Identity");

                this.UserTokenProvider = new DataProtectorTokenProvider<IdentityUser, Guid>(dataProtector)
                {
                    TokenLifespan = TimeSpan.FromDays(14)
                };
            }

在我的应用的不同区域,我通过调用ASP.Identity ApplicationUserManager的GenerateChangePhoneNumberTokenAsync(userId,phoneNumber)方法来使用手机号码令牌。

问题是移动令牌在15分钟后即将到期。

如何更改移动令牌的生命周期?

2 个答案:

答案 0 :(得分:2)

您需要覆盖

Microsoft.AspNet.Identity.UserManager.GenerateChangePhoneNumberTokenAsync

要执行此操作,请查看herehere 如何首先扩展UserManager。

GenerateChangePhoneNumberTokenAsync 中,您需要使用自定义 Rfc6238AuthenticationService ,该使用 timeStep 参数调用 GenerateCode p>

GenerateChangePhoneNumberTokenAsync将如下所示

public class ApplicationUserManager : UserManager<YourIdentityUser, int>
{
    public ApplicationUserManager(IUserSecurityStampStore<YourIdentityUser, Guid> store)
        : base(store)
    {
    }

    // *** some other code

    public override async Task<string> GenerateChangePhoneNumberTokenAsync(Guid userId, string phoneNumber)
    {
        var user = await FindByIdAsync(userId);
        var code = CustomRfc6238AuthenticationService.GenerateCode(user.SecurityStamp, phoneNumber, "optional modifier", TimeSpan.FromDays(14));
        return code;
    }
}

可以找到自定义 Rfc6238AuthenticationService 的示例实现here

答案 1 :(得分:0)

如果您不想覆盖UserManager类,则始终可以在创建后获取令牌并手动调整ExpirationDate。例如,我们在电子邮件发送逻辑中执行此操作(如果您重新发送电子邮件,则始终将令牌刷新24小时):

// Token already created
UserToken userToken = db.UserTokens.Where(t => t.UserId == user.Id && f.IsActive).FirstOrDefault();
userToken.ExpirationDate = DateTime.Now.AddHours(24);