根据 ASP.NET 中的角色设置身份验证 cookie 超时长度

Posted

技术标签:

【中文标题】根据 ASP.NET 中的角色设置身份验证 cookie 超时长度【英文标题】:Setting auth cookie timeout length based on role in ASP.NET 【发布时间】:2011-02-21 00:22:05 【问题描述】:

我想让管理员登录的时间比普通用户长。我没有看到以编程方式或以基于角色的方式设置 cookie 超时的钩子。这在使用表单身份验证的 ASP 中是否可行?

【问题讨论】:

【参考方案1】:

片段:

     switch Role: 
     Case A: VARIABLE X = Y; BREAK;
     CASE B: VARIABLE X = Y2; BREAK;
     ..

     End switch

     FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
        1, // Ticket version
        Username.Value, // Username associated with ticket
        DateTime.Now, // Date/time issued
        DateTime.Now.AddMinutes(VARIABLE X), // Date/time to expire
        true, // "true" for a persistent user cookie
        reader.GetString(0), // User-data, in this case the roles
        FormsAuthentication.FormsCookiePath);// Path cookie valid for

     // Encrypt the cookie using the machine key for secure transport
     string hash = FormsAuthentication.Encrypt(ticket);
     HttpCookie cookie = new HttpCookie(
        FormsAuthentication.FormsCookieName, // Name of auth cookie
        hash); // Hashed ticket

     // Set the cookie's expiration time to the tickets expiration time
     if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;

     Response.Cookies.Add(cookie);

【讨论】:

非常清晰且乐于助人!谢谢!如果我使用 FormsAuthenticationTicket 重载只接收字符串用户名、bool IsPersitent 和 int 超时,我是否也会进行加密和分配给 cookie? 我从这里了解到:msdn.microsoft.com/en-us/library/w04e17xz(v=vs.100).aspx 在备注中,FormsCookiePath 是自动设置的,所以加密等也会这样做。【参考方案2】:

是的,你可以这样做。您需要手动生成身份验证票证,而不是让框架自动生成它。

根据用户角色,您分配给工单的到期时间。

This tutorial show how to generate the ticket manually.

【讨论】:

以上是关于根据 ASP.NET 中的角色设置身份验证 cookie 超时长度的主要内容,如果未能解决你的问题,请参考以下文章

具有 Windows 身份验证的 ASP .NET 身份和数据库中的角色

ASP.NET Core 身份中的角色声明与自定义身份验证中的角色权限相比

通过 ASP.NET 核心身份中的角色声明进行 JWT 身份验证

ASP .NET 中的角色身份验证以 HTTP400 响应结束

控制器 ASP.net 核心 2.1 中的 Jwt 角色身份验证

ASP.Net Core Identity JWT 基于角色的身份验证被禁止