0

我已按照指南中的说明进行操作: LDAP/Active DirectoryHow to use LDAP in ASP.NET Boilerplate (Free Startup Template) 但没有成功。

以下是我的试验和错误:

用户场景:

  • 大多数用户来自域,因此这些域用户应该看不到登录页面,应该能够自动登录平台。

  • 部分用户不是域用户,对平台有访问权限但不属于域的用户应弹出登录页面,输入用户名/密码登录。

这是我的身份验证代码的快照:

If(!HttpConetxt.User.Identity.IsAuthenticated)
{
   var domainUserName = System.Web.HttpContext.Current.User.Identity.Name;
   var entry = new DirectoryEntry("XXX");
   var search = new DirectorySearcher(entry);
   search.Filter = "(sameaccountname=)" + domainUserName + ")";
   // Check if the user is in domain or not
   var result = search.FindOne();
   if(result != null)
   {
      //Domain user, find the mapping user in db and login using the db user
      ...    
   }
}

由于该网站应该同时支持匿名和 Windows 身份验证,因此我启用了两种身份验证方法:

windows_auth

并且还将[AllowAnonymous]属性添加到LoginActionResult。

据我了解,请求身份验证是在 global.aspx 中执行的,所以我想我的身份验证逻辑应该与此有关:

protected void Application_AuthenticateRequest()
{
      ...
}

但似乎我无法将身份验证代码放在那里。因为无论如何,我需要使用db用户来管理用户角色,但是在global.aspx中,UserManager甚至没有。

我曾尝试将这段代码添加到LoginActionResult 中,但有一个问题:当域用户注销时,它会不断登录,因为它无法判断用户是实际注销还是刚进入网站。

所以:

  • 放置这些验证码的正确位置在哪里?

  • Ldap在这种情况下如何工作?Ldap是否满足要求?我永远无法在我的项目中使用Ldap 。

4

0 回答 0