如何将ASP.NET Identity身份验证cookie设置为在特定日期和时间到期

时间:2019-07-02 11:00:20

标签: c# asp.net cookies asp.net-identity-2

This answer seems pretty comprehensive,但是我的应用使用的是ApplicationSignInManager而不是答案使用的AuthenticationManager,因此它实际上不适用于我的应用。

我正在尝试跟踪我的用户登录名(这是客户端内部使用的专有网站)。因此,客户基本上希望登录可以像时间卡一样工作,以便老板可以看到员工何时进入办公室。

此功能意味着我不能依赖于ASP.NET Identity默认行为的持久登录,因为它不允许我控制登录cookie是否过期。

我想做的是每天凌晨4点使cookie失效,无论何时登录。

由于这个原因,limiting the cookie's lifespan in configs也不满足我的要求。

这是我的登录代码-几乎是标准的东西。对于第一个答案,我希望可以将Cookie的到期日嵌入SignIn方法中,但是由于我没有使用AuthenticationManager进行登录,因此似乎没有办法用我当前的代码执行此操作。

var manager = Context.GetOwinContext().GetUserManager<UserManager>();
var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();

// Note that this always persists the login cookie.
var result = signinManager.PasswordSignIn(Email.Text, Password.Text, true, shouldLockout: false);

// Evaluation of result below

如果我需要更改在这里进行登录的方式,那就很好了;我只需要进行一些更改方面的指导(示例代码会有所帮助)。

谢谢!

1 个答案:

答案 0 :(得分:0)

由于没有人愿意回答我的问题,所以我四处尝试了很多东西,并得出了自己的答案:

我问题中的每个链接似乎像limiting the cookie's lifespan in configs,实际上是解决之道。

在auth config方法中,我确定now4am tomorrow之间有多少小时,然后将cookie的ExpireTimeSpan设置为此。

public void ConfigureAuth(IAppBuilder app)
{
    var expiryDate = DateTime.Now.Date.AddDays(1).AddHours(4);
    var ts = expiryDate - DateTime.Now;
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        ExpireTimeSpan = TimeSpan.FromHours(ts.Hours),
        LoginPath = new PathString("/Account/Login"),
        Provider = new CookieAuthenticationProvider
        {
            OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<UserManager, ApplicationUser>(
                validateInterval: TimeSpan.FromMinutes(30),
                regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
        }
    });
}