3

私はイントラネットとインターネットの両方の展開を行っている私が作業しているWebサイトを持っています。 2の唯一の違いは、2つの設定の設定です。フォーム認証クロスWindows認証

インターネット版はフォーム認証(Web設定で定義されている)だけを使用し、ログインしていない場合はログインページが表示されるため、正常に動作します。

イントラネットのバージョンはちょっと面倒です...ユーザが最初にサイトにアクセスすると、httpPlincipalでhttpコンテキストの原則オブジェクトが正しく設定されていますが、その情報を使用して、ユーザーがアプリケーションにアクセスできることを確認してから私自身のIPrincipleインスタンスを作成します。

私はここでやりたいことがいくつかあります...ユーザーを認証するための基礎としてWindowsPrincipalオブジェクトを使用したいが、その時点からフォーム認証を使用する(つまり、Cookieを使用してストアするauthの詳細など)。私はまた、HTTPコンテキストから取得したIPrinc形式の原則のインスタンスが必要です。

これを行うにはどうしたらいいですか?では、global.asaxのSession_Startを参照して、認証ロジックを実行して、何らかの理由でカスタムIPrincipleを保存するようにします(その時点以降のリクエストでは、インスタンスが私のカスタム原則です)。あるいは、Application_AuthenticateRequest 。乾杯 アンソニー

答えて

2

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

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

+0

http://stackoverflow.com/questions/9588265/understanding-wcf-windows-authenticationにお答えください。 – Lijo