实现混合ASP.NET表单auth(AD + DB)的最佳方法是什么?

时间:2008-10-15 22:27:37

标签: asp.net authentication active-directory

我想在ASP.NET网站上实现表单身份验证,该站点应该在数据库中寻找用户以获取一些数据,然后针对LDAP(Active Directory)进行身份验证以验证用户/密码组合。

之后我需要保留一个代表用户的类实例,以各种形式使用它。

我之前尝试使用登录控件执行此操作,该控件检查以前的条件并执行AuthenticateEventArgs.Authenticated = true并将对象放在会话中:Session ["user"] = authenticatedUser;但我在同步这两个问题时遇到了问题(会话在auth cookie之前到期,当页面尝试使用现已解散的会话对象时,我得到了NullReferenceExceptions。)

实现这一目标的最佳方法是什么?有没有办法将会话超时与cookie生命周期同步?用户对象应该以任何其他方式保存?我错过了这一点吗?

更新: 我无法使用Windows身份验证提供程序,因为该网站应该可以从外部访问priate网络。

3 个答案:

答案 0 :(得分:1)

我会使用Windows身份验证作为主要身份验证提供程序,但为用户信息添加自己的简单数据库持久性。

您的会话方法可行,您可以调整IIS中的会话超时并将其与身份验证cookie超时匹配。

此外,您可以在HTTPModule中执行类似的操作以捕获也清除会话的边缘情况(应用程序池回收等)

伪码:

if (session["user"] == null)
{
    Authentication.SignOut();
}

这会强制用户进行身份验证。

答案 1 :(得分:0)

我将session和auth cookie超时值设置为相同的值。我使用滑动窗口作为我的身份验证cookie。我还习惯于在尝试使用它们之前从不假设我从会话中获取的值是非null。我经常将所有会话功能抽象到代理类中,该代理类包含我在会话中存储的值的强类型属性。错误会话数据的错误处理已在代理中本地化。

答案 2 :(得分:0)

在会话中存储用户信息将正常工作。要同步会话超时和身份验证cookie超时,只需编辑您的web.config:

<sessionState timeout="XX" />
<authentication mode="Forms">
  <forms loginUrl="Login.aspx" timeout="XX" />
</authentication>

这两个值都以分钟为单位。

每次从Session获取值时测试null!