首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >窗体身份验证跨Windows身份验证

窗体身份验证跨Windows身份验证
EN

Stack Overflow用户
提问于 2009-08-25 03:11:43
回答 1查看 1.5K关注 0票数 3

我有一个网站,我正在工作,既有内部网和互联网部署。两者之间的唯一区别是两个配置设置。

互联网版本运行良好,因为它只使用表单身份验证(在其web配置中定义),如果未登录,用户将被定向到登录页面。

内部网的版本有点棘手...当用户第一次访问站点时,使用WindowsPrincipal正确地设置了http上下文原理对象,但是使用该信息,我确认允许用户访问应用程序,然后创建我自己的IPrinciple实例。

鉴于此,我想在这里做几件事……我想使用WindowsPrincipal对象作为对用户进行身份验证的基础,然后使用表单身份验证(即使用cookie存储身份验证详细信息等)。我还需要从HTTP上下文中检索的principle的实例属于我的IPrinciple类型。

我该怎么做才是最好的呢?例如,我是应该使用global.asax的Session_Start来执行身份验证逻辑,然后以某种方式让它存储我的自定义IPrinciple (因此,对于此后的任何请求,该实例都是我的自定义原则),还是最好使用Application_AuthenticateRequest进行一些操作。

干杯安东尼

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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修饰您的方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1325863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档