我有一个网站,我正在工作,既有内部网和互联网部署。两者之间的唯一区别是两个配置设置。
互联网版本运行良好,因为它只使用表单身份验证(在其web配置中定义),如果未登录,用户将被定向到登录页面。
内部网的版本有点棘手...当用户第一次访问站点时,使用WindowsPrincipal正确地设置了http上下文原理对象,但是使用该信息,我确认允许用户访问应用程序,然后创建我自己的IPrinciple实例。
鉴于此,我想在这里做几件事……我想使用WindowsPrincipal对象作为对用户进行身份验证的基础,然后使用表单身份验证(即使用cookie存储身份验证详细信息等)。我还需要从HTTP上下文中检索的principle的实例属于我的IPrinciple类型。
我该怎么做才是最好的呢?例如,我是应该使用global.asax的Session_Start来执行身份验证逻辑,然后以某种方式让它存储我的自定义IPrinciple (因此,对于此后的任何请求,该实例都是我的自定义原则),还是最好使用Application_AuthenticateRequest进行一些操作。
干杯安东尼
发布于 2009-08-25 05:11:03
为此要避免使用session对象。Application_AuthenticateRequest是你想要去的地方。在那里,您可以获取WindowsPrincipal,然后转到数据库来填充您自己的自定义IPrincipal实现对象。这意味着Application_AuthenticateRequest会被调用很多,所以在我的应用程序中,我倾向于缓存角色数据至少几秒钟,以减少数据库往返。这也适用于表单身份验证。这两种方法之间的唯一区别是,在Forms场景中,您将从Forms auth模块获得一个GenericPrincipal,并使用它来检索您自己的自定义主体对象,而不是WindowsPrincipal。
在Application_AuthenticateRequest中设置HttpContext.Current.User的另一个结果是,与将主体放在Session对象中不同,您可以使用声明性安全,例如用PrincipalPermissionAttribute修饰您的方法。
https://stackoverflow.com/questions/1325863
复制相似问题