3

HTTP および ASP.NET 開発サーバーを介してカスタム ユーザー名バリデーターを使用するように WCF サービスを構成しようとしています。以下はserviceModelの一部です...

<basicHttpBinding>
    <binding name="Authentication" >
      <security mode="TransportCredentialOnly" >
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
</basicHttpBinding>

  <service behaviorConfiguration="ApiBehavior" name="CriticalWatch.AuthenticationAPI.AuthenticationAPI">
    <endpoint address="/" binding="basicHttpBinding" bindingConfiguration="AuthenticationBinding" name="Authentication" contract="CriticalWatch.AuthenticationAPI.IAuthenticationAPI" />
  </service>

次に、バリデーターの動作があります...

  <serviceBehaviors>
    <behavior name="ApiBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Service.CustomUserNameValidator, MyService" />
      </serviceCredentials>

    </behavior>
  </serviceBehaviors>

私の CustomUserNameValidator は UserNamePasswordValidator を継承しています。バリデータ クラスはインスタンス化されますが、Validate メソッドは呼び出されません。さらに、クライアントはユーザー名とパスワードを渡さずにメソッドを呼び出すことができます。

私は何が欠けていますか?

現時点では、HTTPS を必要としないソリューションが必要です。メッセージで渡されたユーザー名とパスワードに依存したい。

4

3 に答える 3

3

また、 SSLなしで HTTP 経由でユーザー名とパスワードを渡すことができるバインディングを実装する方法についての私のブログ投稿を参照してください。wcf-services/ただし、セキュリティで保護されていないトランスポートで資格情報を平文で渡すことはお勧めできません。ここで説明する手法は、トランスポートを保護するために IPSec などの別のメカニズムを使用していることを前提としています。これは、より優れたスケーラビリティのために SSL ターミネーションをサポートするロード バランサーに役立ちます。

シナリオに具体的に対処するには、WCF とユーザー名とパスワードのバリデーターで HTTPS バインディングを使用できるように、SSL を使用して開発環境をセットアップすることをお勧めします。これは、カスタム バインド要素を実装するよりもはるかに簡単で、思ったほど難しくありません。実際、IIS Express がインストールされている場合は、IIS または Windows サービスで証明書として簡単に使用できる自己署名証明書を取得します。

乾杯、トニー・スニード

于 2012-10-11T19:04:40.297 に答える
1

デフォルトでは、WCF フレームワークは HTTP チャネルを介したユーザー名/パスワードのトランスポートをクリア テキストおよびセキュリティ違反として許可していません。したがって、HTTPS に切り替えると、ユーザー名/パスワード バリデーターが機能します。ユーザー名/パスワード バリデーターを HTTP で動作させたい場合は、これを行うカスタム サービス ホスト ファクトリを作成する必要がある場合があります。ClearUserNameBindingと呼ばれる昔からここにあるものを見つけることができます。HTTP 経由でユーザー名/パスワードの検証を実行できます。

注: 前述のように、セキュリティのために HTTP 経由でユーザー名/パスワードを使用することはお勧めしませんが、サービスが十分にセキュリティで保護されたファイアウォールの背後にあり、クライアントからファイアウォールへの呼び出しがセキュリティで保護されていることが確実な場合は、ユーザー名/パスワードが妥協しないで使えます

于 2012-10-11T09:05:52.637 に答える