gpt4 book ai didi

c# - 使用带有可选输入域\用户名或仅用户名的 MVC4 表单根据事件目录对用户进行身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:18 27 4
gpt4 key购买 nike

我阅读了数百万篇关于 Active Directory 身份验证的帖子,但没有找到任何专门针对我的问题的帖子。

我想使用 MVC4 表单例份验证针对事件目录对用户进行身份验证,并允许插入域名作为选项:

acc: domain.com\username  or  username
pwd: password

我的公司有 20 个子域,我需要对每个域进行身份验证,这就是为什么我不喜欢将我的域保留在应用程序配置中并从中进行选择的选项。

目录条目:

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;
}

手动解析用户名并检查所有 if 条件等等,我的方法看起来像废话,也许它是应用程序配置中要写入的某种参数,它会给我一个让用户输入域\用户名的选项,或者只是用户名,然后我可以获得域 + 用户名或只是用户名,然后根据 AD 对用户进行身份验证。

提前致谢。

最佳答案

您可以尝试使用 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;
}
}
  • 在此之前不要忘记验证用户输入
  • 首先拆分登录字符串
  • 如果用户还没有进入域使用成员(member)资格
  • 如果用户输入了域名,使用 PrincipalContext
  • 如果发生其他事件,您将返回 false

关于c# - 使用带有可选输入域\用户名或仅用户名的 MVC4 表单根据事件目录对用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17911136/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com