0

SAML 実装で Wcf サービスを作成しました。同じためにフェデレーションバインディングを使用しています。同じマシンでクライアント サービスとホスト サービスの両方を実行している場合、クライアント アプリケーションから、WCF Web サービスでホストされているサービスに簡単にアクセスできます。認証に証明書を使用しました(SAML実装)。

参考までに、ID プロバイダーとして機能するクライアント側のカスタム モジュールを用意しています。 ホスト サービスには、 wsfederationbindingを使用して公開される関数がいくつかあります

問題は、別のシステムで WCF サービス ホストを実行し、別のシステムでクライアント アプリケーション (ID プロバイダーを使用するコンシューマー) を実行しているときに、次のエラー メッセージが表示されることです。

  MessageSecurityException: The EncryptedKey clause was not wrapped with the required encryption token 'System.IdentityModel.Tokens.X509SecurityToken'.

注: クライアント サービスとホスト サービスの間で、証明書に関して何か不一致が発生しているように感じます

4

1 に答える 1

1

上記の問題は解決しましたが、実際には上記のエラーの根本的な原因は証明書の不一致でした。SAML 証明書認証手順に関する SAML フォーラムの 1 つを読みました。

  1. トークンは、クライアント側で公開証明書を使用して暗号化されます。
  2. サーバー側(私の場合はWebservice Host)で、受信したトークンは証明書の秘密鍵を使用して復号化されます。

したがって、私の場合、証明書はサーバー側のものと比べてクライアント側で異なっていました。

解像度 :

サーバー側(私の場合はWebサービスホスト)から証明書をエクスポートし、クライアント側で同じものをインポートするだけです。

注: 両側 (クライアント側とサーバー側) に、クライアント証明書とサーバー証明書の 2 つの証明書が存在します。実際には、アプリをダウンロードするのと同じように、クライアントがホスト Web サービスに (動的に) アクセスしたい場合、サービス側で両方の証明書を作成し、クライアント アプリのアクティブ化時にそれらの証明書をクライアントに展開する必要があります。同期中。

于 2013-02-14T14:30:48.733 に答える