3

私は、イントラネットとインターネットの両方に展開されている Web サイトに取り組んでいます。2 つの唯一の違いは、いくつかの構成設定です。

インターネット バージョンは、フォーム認証 (Web 構成で定義されている) を使用するだけで問題なく動作し、ログインしていない場合、ユーザーはログイン ページに誘導されます。

イントラネット バージョンは少しトリッキーです... ユーザーが最初にサイトにアクセスしたとき、http コンテキスト プリンシパル オブジェクトは WindowsPrincipal で正しく設定されていますが、その情報を使用して、ユーザーがアプリへのアクセスを許可されていることを確認してから、独自のアプリを作成します。 IPrinciple インスタンス。

これを踏まえて、ここでやりたいことがいくつかあります... ユーザーを認証するための基礎として WindowsPrincipal オブジェクトを使用したいのですが、その時点からフォーム認証を使用します (つまり、Cookie を使用して認証の詳細を保存するなど) )。また、HTTP コンテキストから取得するプリンシパルのインスタンスを IPrinciple タイプにする必要もあります。

これを行うにはどうすればよいですか?のように、global.asax の Session_Start を参照して認証ロジックを実行し、それを何らかの方法でカスタム IPrinciple に格納する必要があります (その時点以降のすべてのリクエストでは、インスタンスがカスタム プリンシパルになります)。 .

乾杯アンソニー

4

1 に答える 1

2

これにはセッション オブジェクトを使用しないでください。Application_AuthenticateRequest は、あなたがなりたい場所です。そこで、WindowsPrincipal を取得し、データベースに移動して、独自のカスタム IPrincipal 実装オブジェクトを設定できます。ただし、これは Application_AuthenticateRequest が頻繁に呼び出されることを意味するため、私のアプリでは、ロール データを少なくとも数秒間キャッシュして、データベース ラウンド トリップを削減する傾向があります。これは、フォーム認証でも機能します。2 つの方法の唯一の違いは、フォームのシナリオでは、フォーム認証モジュールから GenericPrincipal を取得し、それを使用して、WindowsPrincipal の代わりに独自のカスタム プリンシパル オブジェクトを取得することです。

Application_AuthenticateRequest で HttpContext.Current.User を設定するもう 1 つの結果は、プリンシパルを Session オブジェクトに配置する場合とは異なり、メソッドを PrincipalPermissionAttribute で装飾するなど、宣言型セキュリティを使用できることです。

于 2009-08-25T05:11:03.363 に答える