Windows Azure ACS によって保護された特定の領域を持つ ASP.NET MVC サイトを作成しようとしています。デフォルト エリアは保護しない (つまり、匿名ユーザーを許可する) 必要がありますが、サブ エリアのみを保護します。
Web.config の system.web セクションから認証要素を削除することで、これを実現しました。
<authorization>
<deny users="?" />
</authorization>
次に、目的の MVC3 領域の保護された場所を追加します。
<location path="MyArea">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
ただし、IClaimsIdentity にアクセスし、処理のために属性を取得していた古いコードは、Global.asax の Session_Start イベントに存在していました。サイトがデフォルト領域にアクセスするために認証を必要としないため、認証が行われずに Session_Start が発生します。
WIF の認証イベントを処理するために、どのイベントを関連付けることができますか?
SessionAuthenticationModule_SessionSecurityTokenReceived を使用してスライディング セッション タイムアウトを実装し、OnPostAuthenticationRequest イベントにユーザー分析ロジックを追加しようとしましたが、役に立ちませんでした。
最初に次のイベントに接続した後、ユーザーを取得できました。
FederatedAuthentication.ServiceConfigurationCreated
次に、このイベント内でこのイベントに接続します。
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn
ただし、このイベント内ではセッションは null であり、session_start が再度呼び出されることはありません。そのため、ID プロバイダーにリダイレクトするときにセッションがクラッシュしているようです。
anon -> Application_start
anon -> Session_start
anon -> /MyArea
anon に移動 -> ACS にリダイレクト -> idP
anon にリダイレクト -> ログイン
認証 -> /MyArea
auth にリダイレクト -> FederatedAuthentication.WSFederationAuthenticationModule.SignedIn が発生するが、セッション無効です!
更新: セッションと認証の両方が存在する場所がまだ見つかりません。Unity を使用してオンデマンドでユーザーを検出しています。それが起こったときにそれを行うイベントがあればいいのですが、私の回避策はまだ機能しています。