繁体   English   中英

帮助-MVC证书安全性

[英]Help - MVC Certificate Security

我们有一个MVC 2 / Entity Framework应用程序,用于替换/重写现有系统。 它在开发过程中一直使用ASP成员身份来确保安全,但是现在我们需要替换它,以便与客户现有的安全基础结构兼容,部分原因是允许新旧系统同时运行一段时间,而且还因为它们已经具有流程和系统来设置客户,我们还无法替代。

现有的安全性围绕数据库中的表进行,该表存储映射到客户id的证书号。 然后,使用customerid来过滤UI中发回的相关数据。

我的问题是从证书号到客户ID的最有效方法是什么。 每个MVC控制器动作都可以从HTTPContext获取证书号,并在安全性表中进行查找以获取客户ID,但是对于每个控制器动作而言,这样做似乎效率不高。 该系统可以有1000个并发用户。 我们认为它应该类似于ASP.NET成员身份,其中用户名/密码登录名会生成安全令牌,然后将其放置在Cookie中。 取而代之的是,我们将证书替换用户名/密码登录名,但是它仍会生成安全令牌。

问题是我们对这个系统的了解不足,无法确定如何去做,即使这是最好的方法。 如果有人可以提供任何建议或指导,说明我们将如何实现这一目标,将不胜感激。

要么

  1. 一旦您将其添加到用户会话中,即可在登录时使用。

  2. 将其添加到表单身份验证票中(确保已为POET漏洞打补丁,否则可能被伪造)

要么

  1. 将表缓存在内存中,并根据需要进行查找。 如果您已经在使用会话,则它的效率可能会比会话低一些,因为这将锁定两个集合(正常的会话用法),并且存储在其中的集合必须同步。

如果选择将此信息存储在票证中,则可以创建一个CustomIdentity对象来存储此客户ID。

/// <summary>
        /// Deserializes the forms auth cookie with our userid, companyid, etc.
        /// </summary>
        /// <param name="sender">
</param>
        /// <param name="e"></param>
        void Application_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);
                    //Assign the roles. If they aren't available, get from the session.
                    //The problem is when we use this custom principal it seems our roles arent populated.

                    GenericPrincipal principal = new GenericPrincipal(id, new string[] { "User" });

                    HttpContext.Current.User = principal;
                }
            }
        }

在通过表单身份验证票对每个请求进行身份验证之后,您可以将该信息反序列化为Customer IIdentity对象,然后可以通过以下方式在整个应用程序中读取该对象:

int companyId = ((CustomIdentity)HttpContext.Current.User.Identity).CompanyId

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM