私は持っている:
- ID プロバイダーでもあるパッシブ STS "ログイン アプリケーション"。
- ActAs トークンを受け入れて処理できるアクティブな STS WCF サービス
- Web サイトの証明書利用者
- Web サイトによって呼び出される WCF サービス証明書利用者。
これらはすべて、Windows Identity Foundation とカスタム STS コードを使用してまとめられています。Active Directory (ADFS) は関係ありません。
私が今働いているのは:
- ユーザーが Web サイト RP にアクセスしようとします。
- ユーザーがパッシブ STS にリダイレクトされます。
- ユーザーがログインし、発行されたトークンを取得し、Web サイト RP にリダイレクトされます。
- Web サイト RP は WCF RP へのサービス呼び出しを行い、ActAs トークンを渡すことで委任が発生します。
- アクティブな STS は、ActAs トークンが入ってくるのを確認し、出力 ID を適切に設定して、プライマリ ID が ActAs トークンになり、呼び出し元の ID がアクター チェーンに追加されるようにします。
- WCF RP は適切なトークンをすべて取得し、現在のスレッド プリンシパルは適切な ID とクレームを適切に取得します。
WCF RP がアクティブな STS から追加の要求を要求するようにします。
つまり、アクティブな STS に送られる RST に、サービスが必要とするクレームのリストを含めて、それらの追加のクレームがまだ存在しない場合にフェッチできるようにしたいと考えています。
Web サイト RP クライアントのバインディングを変更することでこれを行う方法を見つけましたが、WCF RP サービス エンドで要件を指定したいと考えています。
私が使用しているバインディングと関係があると感じています。ws2007FederationHttpBinding を ActAs トークンで動作させるのに問題があり、WIF ID トレーニング キットのすべての例で customBinding が使用されていたので、それも行いましたが、最終的には動作しました。これは、私のバインド構成を示す WCF RP の構成スニペットです。
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CustomBinding_FederatedService">
<security
authenticationMode="IssuedTokenForCertificate"
messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10">
<issuedTokenParameters tokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1">
<issuer address="http://localhost:38901/ActiveSts.svc/IWSTrust13" />
<issuerMetadata address="http://localhost:38901/ActiveSts.svc/mex" />
</issuedTokenParameters>
</security>
<textMessageEncoding>
<readerQuotas maxArrayLength="32767" />
</textMessageEncoding>
<httpTransport />
</binding>
</customBinding>
</bindings>
</system.serviceModel>
呼び出し元の Web サイトの構成を変更して、issuedTokenParameters セクションで claimTypeRequirements を示すようにすると、アクティブ STS は実際には RST で必要な要求のリストを確認します... しかし、それは呼び出し元の Web サイトにあり、これは私にとって問題です。
呼び出し元の Web サイトでその構成を複製することなく、WCF RP が必要な追加のクレームを指定できるようにするにはどうすればよいですか?
それが実際に拘束力のある問題である場合は、上記の内容と同等の構成を示していただければ助かります。適切な変更を加えて Web サイトと WCF サービスを更新できますが、必要な要求のリストを制御するには、サービス (またはサービスの動作、またはサービスの構成) が必要です。サービスは、必要なクレームが欠落しているリクエストを受け入れるべきではありません。