2

私はWCFを初めて使用し、この問題で本当に迷っています...クライアントから提供されたユーザー名とパスワードを使用して、WCFサービスが着信要求を認証するようにします。

Web.Config の関連部分は次のようになります。

<endpoint name="wsBinding" 
          address="" 
          binding="wsHttpBinding" 
          contract="ServiceLib.IBooking" 
          bindingConfiguration="myWSSettings"
          />

と...

<bindings>
  <wsHttpBinding>
    <binding name="myWSSettings">
      <security mode="Transport">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>


<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>

      <serviceCredentials>
        <userNameAuthentication
          userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType= "ServiceLib.MyCustomUserNameValidator, ServiceLib" />
      </serviceCredentials>

    </behavior>
  </serviceBehaviors>
</behaviors>

MyCustomUserNameValidator は、ユーザー名がパスワードと等しくない場合に単に例外をスローする一時的なバリデーターです。

クライアント プログラム (コンソール アプリ) はこれを行っています。

        BookingClient client = new BookingClient("wsBinding");
        Passenger passenger = new Passenger();

        // ../

        client.ClientCredentials.UserName.UserName = "SomeUserName";
        client.ClientCredentials.UserName.Password = "WrongPassword";

        // ...
        // ...

        // NOTE: Following should throw My SecurityException Since username and
        // Password are not equal
        bool confirmed = client.IsTicketConfirmed(passenger);

これは私が得るエラーです:

HTTP 要求は、クライアント認証方式 'Negotiate' では許可されていません。サーバーから受信した認証ヘッダーは「Negotiate,NTLM,Basic」でした

本当に助けていただければ幸いです!私はこれを理解しようと多くの時間を費やしましたが、無駄でした.

ありがとうサンディープ

ノート: - - - -

  1. GoDaddy を使用して WCF サービスをホストしています。部分信頼のため、セキュリティ モード = "メッセージ" は使用できません。
  2. SSL 証明書が正しくインストールされている。
4

1 に答える 1