たとえば、ログインフォームlogin.aspxを持つフォーム認証対応のASP.NETアプリケーションがあり、ユーザーがDBに格納されているとします。これで、フォームとWindows認証の両方をサポートしたいと考えています。それは私がしていることです:
私はSQLデータベースを使用します。私はショーウィンドウにログインします応答を送信する方法を、追加login.aspxのフォームでフォームCOMPUTER \ユーザー
にWindowsユーザーの名前を救うするWindowsUserNameという名前のこのテーブルの新しい列に追加します。
if (Request.QueryString["use"] == "windows")
{
var windowsuser = Request.ServerVariables["LOGON_USER"];
if (windowsuser.Length == 0)
ActivateWindowsLogin();
else
{
// get userId from DB for Windows user that was authenticated by IIS
// I use userId in .ASPXAUTH cookie
var userId = GetUserIdForWindowsUser(windowsuser);
if (userId > 0) //user found
{
// here we get User object to check roles or other stuff
var user = GetApplicationUser(userId);
// perform additional checks here and call ActivateWindowsLogin()
// to show login again or redirect to access denied page.
// If everythig is OK, set cookie and redirect
FormsAuthentication.SetAuthCookie(userId.ToString(), false);
Response.Redirect(FormsAuthentication.GetRedirectUrl(userId.ToString(), false), true);
}
else //user not found
ActivateWindowsLogin();
}
}
else
{
//your Forms auth routine
}
GetUserIdForWindowsU:
private void ActivateWindowsLogin()
{
Response.StatusCode = 401;
Response.StatusDescription = "Unauthorized";
Response.End();
}
どこかに私が追加したlogin.aspxのをPage_Loadで<a href="login.aspx?use=windows">Admin</a>
のようなリンクを持っていますserとGetApplicationUserはサンプルのための私のメソッドです。
2つの認証方式がウェブサイトの2つの異なる部分を管理しているため、それらを混在させることはできません。私はそれらを別々の2つのアプリケーションに分ける予定です。完了したら、私はForms AuthCookieを使うことができますが、依然としてドメインアカウントで検証します。 –