.NET でのユーザー ID の監査 - 良い戦略は何ですか?
質問
これは多くの開発者がこれまでに直面したことのある要件だと思います。ビジネスでは、システム内で誰がアクションを実行しているかを知るために監査証跡が必要です。
監査情報の保存方法を選択するかどうかに関係なく、この問題の核心は、現在のユーザーを識別する方法です。
小さなドメイン モデル クラスからサービス コンポーネントに至るまで、次のいずれかのホスト アプリケーションから安全に呼び出すことができるコンポーネントを作成したいと考えています。
- Windows デスクトップ アプリケーション。
- IIS でホストされる ASP.NET Web サイト。
- IIS でホストされる WCF サービス。
- Windows サービスでホストされる WCF サービス。
テクノロジーの範囲、さまざまな認証モデル、および「匿名」ユーザーの概念を考慮する必要があることを考えると、コンポーネントを呼び出した人の ID を一元的に取得するために使用する戦略が明確ではありません。
賢い皆さん、これに対処するアプローチを提案していただけますか?
解決
Iは、一般的にアプリケーションは、そのアイデンティティ、現在のユーザを表すプリンシパルにThread.CurrentPrincipal
を設定することを必要とするであろう。これは、アプリケーションの起動時に行うことができますIISなどでホストされたASP.NETやWCFアプリケーションでHttpContext.Current.UserまたはRoles.GetCurrentUser()からクライアントで(リサイズまたはコンソール)アプリ(WindowsIdentity.GetCurrent()を使用して)ます。
次に下位レベルのコンポーネントでは、単に監査にThread.CurrentPrincipal.Identity
を使用します。
編集
- (コメントに反応して)そのThread.CurrentPrincipal.Identity
は、スレッドのセキュリティコンテキストとは何の関係もありません注意してください。これはWindowsIdentityで表され、WindowsIdentity.GetCurrent
を使用して取得し、WindowsIdentity.Impersonate
を使用して変更することができます。
他のヒント
最善のアプローチは、最新の技術を使用して、のWindowsを使用することが考えられますアイデンティティ財団はします。
WIF .NETを使用して複数の技術間でユーザーのアイデンティティの問題に対処するように設計されています。