0

自己署名 SSL 証明書を使用して https で実行される基本的な http 認証を使用して、自己ホスト型の WCF RESTful サービスを作成しました。すべて正常に動作します。ユーザーは、Web ブラウザーを介してサービス操作にアクセスします。

問題は、顧客がサービス ユーザーに基本認証 (ユーザー名とパスワード) と証明書の両方を使用して認証することを望んでいることです。私はこれを達成できませんでした。

WCF 4.5 で複数の認証方式を使用できる可能性があることを確認しました。私はこれを調べましたが、役に立ちませんでした。

この投稿にも出くわしました(最後の回答を参照)が、試してみると次のエラーが発生しました:

「例外が発生しました: HTTPS リスナー ファクトリは、クライアント証明書と認証スキーム 'Basic' を要求するように構成されました。一度に要求できる認証形式は 1 つだけです。」

私の構成はコードで行われ、次のようになります (これは機能するバージョンです)。

Uri baseAdress = new Uri("https://localhost:8446/"); 
WebServiceHost host = new WebServiceHost(typeof(RestService));
WebHttpBinding wb = new WebHttpBinding();
wb.Security.Mode = WebHttpSecurityMode.Transport;
wb.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
host.AddServiceEndpoint(typeof(IRestService), wb, baseAdress);
host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustomUserNameValidator();
host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
host.Description.Endpoints[0].Behaviors.Add(new WebHttpBehavior { HelpEnabled = true });
host.Open(); 

ヒントをありがとう、

4

1 に答える 1

0

単一のエンドポイントでのマルチ認証は、Web でホストされるシナリオ (セルフホストではない) 用です。clientCredentialType='InheritFromHost' と言って Web ホストでこれを構成し、vdir 認証でその特定のエンドポイントに設定するすべての認証スキームを設定できます。タイトル「複数認証のサポート」については、このドキュメントを参照してください。

複数の認証のサポート HTTP トランスポートおよびトランスポート セキュリティを使用する場合に、単一の WCF エンドポイントで、IIS でサポートされているように、複数の認証モードをサポートするサポートが追加されました。IIS では、仮想ディレクトリで複数の認証モードを有効にすることができます。この機能により、単一の WCF エンドポイントで、WCF サービスがホストされている仮想ディレクトリで有効になっている複数の認証モードをサポートできます。

于 2013-04-03T16:48:03.050 に答える