我阅读了数百万条有关活动目录身份验证的帖子,但没有找到任何有关我的问题的帖子。
我想使用MVC4表单身份验证对活动目录进行身份验证,并允许插入域名作为选项:
acc: domain.com\username or username
pwd: password
我公司有20个子域名,我需要对每个域进行身份验证,这就是为什么我不喜欢选择将我的域名保存在app config中并从中进行选择。
目录条目:
var directoryEntry = new DirectoryEntry("LDAP://" + domain, userName, password);
会很棒,但如果用户不在域名前面放置域名?我会得到例外,用户不会被认证。我想要一个方法:
public bool AuthenticateUser(string username, string password)
{
Checking if username has domain name included;
use some kind of authetication method;
returns true/false;
}
手动解析用户名并检查所有条件等等,我的方法看起来像废话,也许是app app中的某种参数写入会给我一个选项让用户输入domain \ username或者只是用户名和我可以获得域名+用户名或只是用户名,然后验证用户对AD。
提前致谢。
答案 0 :(得分:2)
您可以尝试使用Membership和PrincipalContext
来使用双重身份验证解决方案public bool ActiveDirectoryAuthentication(string username, string password)
{
var splittedCredentials = username.Split(new[] { "\\" }, StringSplitOptions.None);
switch (splittedCredentials.Length)
{
case 1:
{
var authenticated = Membership.ValidateUser(username, password);
if (authenticated)
{
FormsAuthentication.SetAuthCookie(username, false);
}
return authenticated;
}
case 2:
{
var principalContext = new PrincipalContext(ContextType.Domain, splittedCredentials[0]);
using (principalContext)
{
var authenticated = principalContext.ValidateCredentials(splittedCredentials[1], password);
if (authenticated)
{
FormsAuthentication.SetAuthCookie(splittedCredentials[1], false);
}
return authenticated;
}
}
default:
return false;
}
}