对于给定的应用程序,我有一个由 C# 代码隐藏文件支持的 .aspx 登录表单。
在后面的代码中,我使用了以下“本土”方法:
private bool AuthenticateUser(String username, String password)
{
bool validated = false;
try
{
PrincipalContext pc = new PrincipalContext(ContextType.Domain, "domnet.domad.com", "dc=domnet,dc=domad,dc=com");
IdentityType ADElement;
UserPrincipal up;
//Try first with no @DOM.COM - this should work for SamAccountName values:
username = username.ToUpper().Replace("@DOM.COM", "");
ADElement = IdentityType.SamAccountName;
up = UserPrincipal.FindByIdentity(pc, ADElement, username);
validated = pc.ValidateCredentials(username, password, ContextOptions.Negotiate);
//If SamAccountName fails try UserPrincipalName with @DOM.COM
if (!validated)
{
username = username + "@DOM.COM";
ADElement = IdentityType.UserPrincipalName;
up = UserPrincipal.FindByIdentity(pc, ADElement, username);
validated = pc.ValidateCredentials(username, password, ContextOptions.Negotiate);
}
//Put username into session
if (validated)
{
Session["Username"] = username.Replace("@DOM.COM", "");
}
}
catch (Exception) //login failure...
{
validated = false;
}
return validated;
}
这适用于应用程序,但我还有其他需要身份验证的应用程序。
我真的不想将登录文件复制/粘贴到任何应用程序中。
所以我最基本的问题是我有哪些选择可以在应用程序之间集中验证代码?
将来,我还将关注:
不仅验证用户名/密码,还验证 AD 组成员身份。
一旦用户通过身份验证,应用程序之间就不再有登录屏幕。(单点登录)
在我看来,我不是第一个遇到这个问题的人。
如果可能的话,我更愿意使用开箱即用的解决方案而不是开发自己的解决方案。