2011-02-18 7 views
0

最近WindowsPrincipalで作業しようとしましたが、本当に混乱しています。このコードスニペットを使用します。IsInRoleとADを確認

WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
MessageBox.Show(Thread.CurrentPrincipal.IsInRole("MyDomain\\Users").ToString()); 

Trueを返すので問題ありません。しかし、私はこの "IsInRole"チェックがActive Directoryに対して機能すると考えました。しかし、ネットワークケーブルを抜くと、それでも真実を返します。どうして?ログインしているユーザーがADに対して特定のドメインにいるかどうかを確認する簡単な方法はありますか?

答えて

1

ロールのメンバーシップ(グループポリシーの実施をサポートする)を含む、Active Directoryの資格情報をローカルシステムにキャッシュできます。 MSDN KB Cached Domain Logon Informationに記載されているように、資格情報キャッシュをオフにすることはできますが、キャッシュをクリアするかどうかはわかりません。キャッシュされた資格情報を持つシステムにいないため、私は確認できませんが、レジストリキーHKEY_LOCAL_MACHINE \ SECURITY \ CACHE \に値が "NLx"(xは整数)のハッシュ値として格納されていると考えられます。

1

あなたのコードは問題ありません.Windowsは、私たちが思っているよりもはるかに賢く、ネットワークケーブルを切断してもユーザグループのメンバーシップをキャッシュしています。実際には、ADドメインにいる場合でもケーブルを抜いてすべてがローカルにキャッシュされているのでログインしてください。

実際の動作を確認したい場合は、ケーブルを抜いて、切断中に別のグループメンバーシップをチェックすると偽になります。その後、サーバー上の別のグループにユーザーを追加すると、マシンを再びネットワークに接続し、ログオフ/ログインしてください。

+0

速い回答ありがとうございますが、これはセキュリティ上の問題ではありませんか?このコードスニペットをサーバー側(WCFサービスのOperationContext経由)で認証すると、権限を持たない(一部のグループから取り出された)ユーザーでも、サーバーがログオフしてログインするまでログインできなくなります。 –

関連する問題