2008-09-10 31 views
8

独自のUser、Roles、Permissionデータベースを管理するASP.NETアプリケーションがあり、最近、Windowsドメインアカウントを保持するためにUserテーブルにフィールドを追加しました。ログインしたWindowsドメインアカウントをASP.NETアプリケーションからどのように取得しますか?

物理的ににログインする必要はなく、現在ログインしているWindowsドメインアカウントDOMAIN \ usernameに基づいて自動的にログインするようにしたいと考えています。独自のUserテーブルに対してWindowsドメインアカウントを認証する必要があります。

これはWindowsフォームで行うケーキです.Webフォームでこれを行うことは可能ですか? 。私は、我々のシステムは、ログを処理したい、ユーザーがWindowsチャレンジ画面が表示されないようにする

明確化:我々は独自のカスタムプリンシパルオブジェクトを使用しています。

明確化:違いがあるかどうかはわかりませんが、私たちはIIS7を使用しています。

+0

は...問題は、私は、カスタムプリンシパルオブジェクトを使用しています。私は統合されたセキュリティを有効にしようとしましたが、ユーザーがログインとパスワードの入力を求められている間は、ログインした後、Environment.UserNameがNETWORK SERVICEに戻りました。 – mattruma

+0

偽装のようなサウンドは無効になります。偽装は、認証されたユーザーに代わって要求を実行するようにASP.NETに指示します。それがなければ、ASP.NETはデフォルトのASP.NET Serviecアカウント(またはWindows 2003/2008のNETWORK SERVICE)を使用してリクエストを実行します。 – Chris

+0

私はまだこれを行うことができません。私はIISインテグレーションを手伝っても役に立たず、NETWORK SERVICEアカウントに戻ってきました。とにかくユーザーが現在のWindows NTの資格情報に基づいて**自動的に**ログインするようにしていますか? – mattruma

答えて

1

私はあなたが数年前にやりたいことをかなり正確に行いました。私はそれのためにいくつかのコードを探していましたが、それは前の仕事であったので、コードは家にあります。

私はthis articleを私の出発点として使用しましたが、覚えています。実際にユーザーとLDAPのチェックを実行できるように、LDAPプロバイダーを設定します。 LDAPのアプローチを試してみるかどうかを確認するための1つのこと。 LDAPを設定する設定ファイルで、LDAPがすべて大文字であることを確認します。そうでない場合、解決されません。

1
using System.Security.Principal; 
... 
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User; 

現在のドメインユーザーを取得します。もちろん、IISがWindows認証を処理するように設定されていることを確認する必要があります。

1

これが役に立つかもしれません:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent(); 

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity); 

string name = myPrincipal.Identity.Name; 
string authType = myPrincipal.Identity.AuthenticationType; 
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString(); 

string identName = myIdentity.Name; 
string identType = myIdentity.AuthenticationType; 
string identIsAuth = myIdentity.IsAuthenticated.ToString(); 
string iSAnon = myIdentity.IsAnonymous.ToString(); 
string isG = myIdentity.IsGuest.ToString(); 
string isSys = myIdentity.IsSystem.ToString(); 
string token = myIdentity.Token.ToString(); 

免責事項:私は、TechNetの記事からこれを得たが、私は、リンクを見つけることができません。

+0

カスタムPrincipalとIdentityオブジェクトを使用しています。 – mattruma

0

System.Threading.Thread.CurrentPrincipalを使用できます。

+0

カスタムPrincipalとIdentityオブジェクトを使用しています。 – mattruma

+0

これはなぜあなたを助けないのですか? CurrentPrincipalはカスタムプリンシパルオブジェクトを返します。 –

+0

私のカスタムプリンシパルにはWindowsアカウント情報が含まれていません。 – mattruma

0

でRequest.ServerVariables [ "REMOTE_USER"]

これはあなたのセットアップのため未検証ですが、私はしばらく前にこれを使用して思い出します。

2

この種の統合は、サーバーレベルでは、ユーザーがログインしていないと判断するIISです。ブラウザが反応するユーザに認証プロンプトを返すのはIISです。

ドメインログインを使用したいので、これを行うには1つの方法しかありません。 integrated windows authentication。これは、IISサーバーもドメインの一部であり、ユーザーがプロキシを介さずに直接マシンにアクセスしている場合や、ドメインの一部であるマシン(適切にログインしたユーザー)からアクセスする場合にのみ機能します。

ただし、カスタムプリンシパルオブジェクトは楽しいゲームを作成することがあります。この型の認証はWindowsPrincipalとWindowsIdentityになります。 (How To: Use Windows Authentication in ASP.NET 2.0を参照)How To: Use Windows Authentication in ASP.NET 2.0を参照してください。

カスタムロールのためにカスタムプリンシパルを使用するとしますか?私はあなたがうまくプレイするために2つを得ることができるとは思わない; role providerを作成してデータストアを見たり、ADAM(プログラムごとに役割を提供し、優れた管理ツールが付属しているADの拡張機能)を見ることができます。

0

Try Request.ServerVariables( "LOGON_USER")を試してください。

このディレクトリで匿名ユーザーが許可されないようにディレクトリセキュリティオプションが設定されている場合、サーファーがこのページにアクセスすると、ユーザー名とパスワードを要求する標準モーダルダイアログが表示されます。 Request.ServerVariables( "LOGON_USER")はそのユーザーを返します。

ただし、独自のカスタムセキュリティオブジェクトを使用しているため、これはおそらく動作しません。そのログオンボックスを回避する方法や、NT資格情報を要求する前にそのサイトにNT資格情報を渡す方法がわかっている場合は、すべて設定されます。

+0

正解...問題は、自分のプリンシパルオブジェクトを使いたいということです。 – mattruma

0

偽装について考えましたか?ユーザーのNTログオン資格情報をカスタムセキュリティオブジェクトに格納して、必要に応じてコードを使用してユーザーをインパクトすることができます。私はすべてのこれらのオプションを試してみた

http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx