それはあなたが尋ねた興味深い質問です。なんらかの理由で、Microsoft がこの "Windows Identity Foundation" フレームワークを多くのドキュメントなしで発表したことは知っています。私はこれを知っています。なぜなら、それを新しいプロジェクトで使用する方法を理解し、それを既存のインフラストラクチャと統合することを任されたからです。私は良い情報を探して何ヶ月もウェブを検索してきました。
あなたが説明した問題を解決するために、私は多少異なる角度を取りました。
私は既存のログオン アプリケーションを利用して、Microsoft の WIF 配管をそれに統合しました。つまり、ユーザーがログインするアプリケーションがあるということです。ログオン アプリケーションは、ユーザーによって提供された資格情報を別のサーバーに送信し、別のサーバーはユーザー ID を返します (またはログオンの失敗を示します)。
Microsoft の例のいくつかを見ると、彼らは次のことを行っていることがわかります: SignInRequestMessage
(証明書利用者アプリケーションによって生成された) クエリ文字列から a を構築し、カスタム クラスからセキュリティ トークン サービスを構築し、最後に現在の httpcontext で FederatedSecurityTokenServiceOperations.ProcessSignInresponse を呼び出します。応答。残念ながら、ここではうまく説明できません。コードサンプルを見る必要があります。
私のコードの一部は、コード サンプルに非常に似ています。独自のロジックの多くを実装することに関心がある場所は、GetOutputClaimsIdentity
. これは、ログインしているユーザーを記述するクレーム ID を構築する関数です。
さて、あなたが本当に知りたいと思っていることは次のとおりです。これは、Microsoft がドキュメント (AFAIK) で説明していないことです。
ユーザーがログインすると、証明書利用者アプリケーションにリダイレクトされます。ログオン アプリケーションの動作に関係なく、WIF クラスはユーザーのブラウザーに応答を送信します。この応答には、トークン署名証明書とユーザーの要求を含む "非表示の" HTML 入力が含まれています。(クレームはクリア テキストになります)。この応答の最後に、証明書利用者の Web サイトへのリダイレクトがあります。このアクションは「フィドラー」でキャプチャしたからこそわかる
証明書利用者の Web サイトに戻ると、WIF クラスが (コードが実行される前に) 応答を処理します。証明書が検証されます。既定では、(Visual Studio から証明書利用者アプリケーションで [STS 参照を追加] をクリックして) FedUtil.exe を使用して証明書利用者 Web サイトをセットアップした場合、Microsoft のクラスは証明書の拇印を検証します。
最後に、WIF フレームワークは、ユーザーの要求を含む Cookie をユーザーのブラウザーに設定します (私の経験では、Cookie 名は "FedAuth" で始まります)。Cookie は人間が読み取れるものではありません。
これが発生したら、必要に応じて、ClaimsAuthenticationClass
. これは、コードが再び実行される場所です。
これはあなたが説明したものとは異なることは知っていますが、このセットアップは機能しています。これが役立つことを願っています!
ps。Windows Identity Foundation について私が尋ねた他の質問を確認してください。
更新: 以下のコメントで質問に答えるには:
私が省略したことの 1 つは、ユーザーがログインしているアプリケーションの URL を含むクエリ文字列を使用したリダイレクトによって、STS ログオン アプリケーションへのリダイレクトが行われることです。このリダイレクトは、ユーザーが認証を必要とするページに初めてアクセスしようとしたときに自動的に発生します。または、モジュールを使用して手動でリダイレクトを実行できると思いWSFederationAuthentication
ます。
私はこれを試みたことはありませんが、アプリケーション自体の中でログオン ページを使用したい場合は、フレームワークで次のものを使用できるようにする必要があると思います。
1) ライブラリ内に STS コードをカプセル化します。2) アプリケーションからライブラリを参照します。3) アプリケーション内にログオン ページを作成します。そのようなページが認証を必要としないことを確認してください。wsFederation
4) web.configのセクション内の要素の issuer プロパティをMicrosoft.IdentityModel
ログイン ページに設定します。