Forms身份验证跨Windows身份验证(Forms Authentication cross W

2019-07-03 14:47发布

我有一个网站,我的工作在同时具有内部网和互联网的部署。 2之间的唯一区别是一对夫妇的配置设置。

互联网版本的作品罚款,它只是使用窗体身份验证(这是在它的Web配置定义),如果不是在用户登录被引导到登录页面。

Intranet版本是有点麻烦......当用户第一次来到了HTTP上下文主要目的是与WindowsPrincipal正确设置站点,但使用这些信息我确认该用户被允许访问的应用程序,然后创建我自己IPrinciple实例。

鉴于这种有几件事情我想在这里做...我想使用WindowsPrincipal对象为基础对用户进行认证,但随后从该点向前使用窗体身份验证(即使用一个Cookie存储身份验证细节等)。 我还需要的,我从HTTP上下文检索是我IPrinciple类型的原理实例。

我是如何最好地去这样做? 正如我应该看看在Global.asax的在session_start进行身份验证逻辑,然后以某种方式得到它来存储我的自定义IPrinciple(因此对于该点之后的任何请求的情况下是我的自定义原理)还是我最好做一些与Application_AuthenticateRequest 。

干杯安东尼

Answer 1:

避免这种情况的会话对象。 Application_AuthenticateRequest是你想要的。 在那里,你可以采取的WindowsPrincipal,然后去到数据库来填充自己的自定义的IPrincipal-实施对象。 这意味着,Application_AuthenticateRequest被调用了很多,虽然如此,我的应用程序,我倾向于缓存角色数据至少几秒钟,以减少对数据库往返。 这也适用于Forms身份验证。 这两种方法之间的唯一区别是,在窗体方案中,您从窗体身份验证模块获得的GenericPrincipal,你会用它来找回自己的自定义主要对象,而不是WindowsPrincipal。

在Application_AuthenticateRequest设置HttpContext.Current.User的另一个结果是,如果你把你的委托人在Session对象不同,你可以使用声明的安全性,如用PrincipalPermissionAttribute装饰你的方法。



文章来源: Forms Authentication cross Windows Authentication