在每个请求上使用基于角色的自定义身份验证查询数据库的正确方法 ASP.NET MVC

2023-12-07

这可能是一个有点无知的问题,但我是 mvc 新手,所以我很抱歉!

我研究了书呆子晚餐身份验证模型,但在我的应用程序中,我有一个复杂的基于角色的身份验证。所以我做的是这样的:

 void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
        {
            HttpCookie authCookie = HttpContext.Current.Request
               .Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                string encTicket = authCookie.Value;
                if (!String.IsNullOrEmpty(encTicket))
                {
                    FormsAuthenticationTicket ticket = 
                            FormsAuthentication.Decrypt(encTicket);
                    CustomIdentity id = new CustomIdentity(ticket.Name);
                    GenericPrincipal prin = new GenericPrincipal(id, id.Roles);
                    HttpContext.Current.User = prin;
                }
            }
        }

在登录时,我使用 FormsAuth 验证用户名/密码,然后创建 cookie。

这里的问题是每次我创建自定义身份时,我都必须查询数据库中的用户角色。有没有correct解决这个问题还是我正在做正确的事情来查询每个传入请求的数据库?我应该将角色列表保存在 cookie 或其他东西中吗?

我也不太明白 forms auth 如何处理身份验证的整个生命周期?我用同样的IFormsAuthentication书呆子晚餐用户和登录期间我打电话的设计模式FormsAuth.SignIn()这又调用FormsAuthentication.SetAuthCookie,什么时候能够调用membershipservice.validateuser()方法 ??另外如果验证 cookie 已设置为什么书呆子晚餐会创建一张票,然后将其添加到请求中,然后在期间阅读它PostAuthenticationRequest检查它是哪个用户。工单操作是否像会话一样?

谢谢!圣诞节快乐!


Update : 这个链接让我对表单身份验证票证有了更好的理解。


“正确的?”这是一个见仁见智的问题。

我想说,如果您没有遇到由该查询引起的数据库性能问题,那么就不用担心。

如果是,您可以将身份验证代码集中到某种身份验证提供程序或类型中,并将身份验证信息缓存在内存中,直到写入更新数据库,这会同时使缓存失效。

(你的第二个问题本身就很好;我没有足够的信息来回答它。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在每个请求上使用基于角色的自定义身份验证查询数据库的正确方法 ASP.NET MVC 的相关文章