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

标签 asp.net-mvc forms-authentication role-based custom-authentication formsauthenticationticket

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

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

 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。

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

我也不太明白 forms auth 如何处理身份验证的整个生命周期?我使用与 Nerd 晚餐用户相同的 IFormsAuthentication 设计模式,并且在登录期间我调用 FormsAuth.SignIn() ,后者又调用 FormsAuthentication.SetAuthCookie code>, 它什么时候成功调用 membershipservice.validateuser() 方法?另外,如果auth cookie已设置,为什么 Nerd 晚餐会创建一个票证,然后将其添加到请求中,然后在PostAuthenticationRequest期间读取它以检查它是哪个用户。工单操作是否像 session 一样?

谢谢!圣诞快乐!

<小时/>

更新:This link让我对表单例份验证票证有了更好的理解。

最佳答案

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

我想说,如果您没有遇到此查询导致的数据库性能问题,那么不必担心。

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

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

关于asp.net-mvc - 在每个请求上使用基于角色的自定义身份验证查询数据库的正确方法 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531287/

相关文章:

c# - 我可以像在表单中那样在 View 上显示 datagridview 吗?如果是那么怎么办?

c# - 在 Response.Redirect 中移除对象移动的 HTML

asp.net-mvc - @Html.DropDownList 无法添加表单控件类

iis - 使用 Powershell 配置 IIS - 启用表单例份验证

c# - 如何使用表单例份验证锁定用户

mysql - 如何在 AngularJS 中处理基于角色的授权?

asp.net-mvc - MVC3 Razor URL.Action 参数值带有正斜杠。给出错误

asp.net - ASP.net 中的全局 OnLoggedOut 事件?

java - Spring/Hibernate 应用程序中的角色/权限

asp.net-mvc - ASP.NET MVC 中基于角色的访问控制 (RBAC) 与基于声明的访问控制 (CBAC)