2011-02-01 9 views
4

の古いセットを返す私はIISサーバー上のユーザーのコンピュータ またはSystem.Web.HttpContext.Current.Request.LogonUserIdentity.GroupsSystem.Security.Principal.WindowsIdentity.GetCurrent().Groupsのいずれかを使用して、彼女のグループを列挙しようとしたとき、私は自分の昔のリストを取得することをユーザーに持っていますグループではなく、新しい。列挙グループ)のグループ

認証するDCを確認しました.ASP.NETページがSharePointインスタンス内で実行されているため、LogonUserIdentityがKerberosチケットから提供されています。

WindowsIdentityまたはLogonUserIdentityに頼るのではなく、ADから直接グループを検索する必要がありますか?

+0

ループを完了します。グループのトークンは、古いグループに追加され、再び削除されるまで更新されませんでした。さらに、彼女は新しいグループから削除され、グループに追加されました。これは、何かをリセットさせ、グループをLoginUserIdentityで適切に表現させるのに十分でした。 –

答えて

5

WindowsIdentityまたはLogonUserIdentityを使用する場合は、Kerberosチケット許可チケット(TGT)に格納されている承認データからグループ情報を取得します。

認証されてKerberos TGTを取得すると、Active Directoryを再度照会してすべてのグループ情報を取得する必要がないので、強力で便利です。実際、グループ列挙はかなり高価で複雑です。したがって、Kerberosのチケット方法が好まれ、この方法はWindowsリソースにアクセスするときに使用されています。

ただし、グループにユーザーアカウントを追加すると、WindowsIdentityまたはLogonUserIdentityというアプローチでは、新しく追加されたグループが認識されなくなります。あなたはあなたのKerberosチケットを削除して、もう一度それを取得する必要があります。ログオフしてからログオンするか、画面をロックしてパスワードを入力して画面をロック解除することができます。

何らかの理由で自分でグループ列挙したい場合は、.NET 3.5でUserPrincipal.GetAuthorizationGroupsを使用することをお勧めします。ユーザーが所属するすべてのセキュリティグループを返します。

+0

これは古い質問ですが、ログオフして再びオンにすると、WindowsIdentity.GetCurrent()が強制的に更新されることを示すドキュメントがあります。ユーザーがログオフした後、グループが毎回更新されていることを確認したい - MSDNでこれまでに何も見つかりません –

関連する問題