我已按照指南中的说明进行操作: LDAP/Active Directory 和How 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 身份验证,因此我启用了两种身份验证方法:
并且还将[AllowAnonymous]
属性添加到Login
ActionResult。
据我了解,请求身份验证是在 global.aspx 中执行的,所以我想我的身份验证逻辑应该与此有关:
protected void Application_AuthenticateRequest()
{
...
}
但似乎我无法将身份验证代码放在那里。因为无论如何,我需要使用db用户来管理用户角色,但是在global.aspx中,UserManager
甚至没有。
我曾尝试将这段代码添加到Login
ActionResult 中,但有一个问题:当域用户注销时,它会不断登录,因为它无法判断用户是实际注销还是刚进入网站。
所以:
放置这些验证码的正确位置在哪里?
Ldap在这种情况下如何工作?Ldap是否满足要求?我永远无法在我的项目中使用Ldap 。