2009-08-06 13 views
8

私は、2つのレベルのセキュリティを備えた内部アプリケーションを持っています。クライアント側のアプリケーションとNTLMのFormsAuthentication管理インターフェイスの統合認証。NTLMを使用してユーザーを偽装する

FormsAuthenticationクラスのメソッドを使用して適切な.ASPXAUTHクッキーを作成するだけで簡単にクライアントを偽装できます。しかし、NTLM用のHTTP認証ヘッダーを生成することはこれまでのところ私の垣根を越えています。

私はこの記事(http://msdn.microsoft.com/en-us/library/ms998358.aspx#paght000025_usingimpersonation)が見つかったときに私の希望を持っていましたが、要求の間だけコードを実行するためのコンテキストを作成することに気付きました。私はセッション全体を切り替えて、別のドメインログインを使用しているとサーバーに見せたいと思います。私は自分のアカウントに管理者特権を持っているので、ドメインパスワードを盗み出したり盗む目的ではありません。

それは可能ですか?ありがとう。

答えて

7

たとえば、ログインフォーム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はサンプルのための私のメソッドです。

+0

2つの認証方式がウェブサイトの2つの異なる部分を管理しているため、それらを混在させることはできません。私はそれらを別々の2つのアプリケーションに分ける予定です。完了したら、私はForms AuthCookieを使うことができますが、依然としてドメインアカウントで検証します。 –

関連する問題