特定のアプリケーションに対して、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 グループのメンバーシップも確認します。
ユーザーが認証されると、アプリ間でログイン画面が表示されなくなります。(SSO)
この問題に遭遇したのは私が初めてではないように思えます。
可能であれば、独自のソリューションを開発するよりも、すぐに使用できるソリューションを使用したいと思います。