6

wsHttpBinding および TransportWithMessageCredential に対して、次のバインディング構成 (スペースのバインディングからすべての属性を削除しました) を持つ IIS でホストされた WCF サービスがあります。

   <wsHttpBinding>
    <binding name="BindingName" .../>
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </wsHttpBinding>   

次のサービス動作で:

  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceCredentials>
       <userNameAuthentication userNamePasswordValidationMode="Windows" />
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>

匿名認証が無効になり、Windows 認証が有効になります。

クライアント側では、有効な Windows ユーザーとパスワードを使用して資格情報が設定されていますが、サービスを呼び出すたびに次の例外が発生します。

HTTP 要求は、クライアント認証スキーム「匿名」では許可されていません。サーバーから受信した認証ヘッダーは「Negotiate,NTLM」でした。---> System.ServiceModel.Security.MessageSecurityException: HTTP 要求は、クライアント認証方式 'Anonymous' で承認されていません。サーバーから受信した認証ヘッダーは「Negotiate,NTLM」でした。---> System.Net.WebException: リモート サーバーがエラーを返しました: (401) Unauthorized.

WCF サービスの自己ホスト型バージョンでは、有効な Windows アカウントで正常に動作します。

どんな助けでも大歓迎です。

4

1 に答える 1

2

IIS で Windows 認証を有効にするには、資格情報がトランスポート層で提供される必要がありますが、構成では認証がメッセージ層で行われるように定義されています。

この問題を解決するには、次のいずれかを実行する必要があります

1) 認証はメッセージ層で処理されるため、IIS で匿名アクセスを有効にします。

また

2)セキュリティモードをトランスポートに更新します

<wsHttpBinding>
    <binding name="BindingName" .../>
      <security mode="Transport">
        <transport clientCredentialType="Ntlm" />
      </security>
    </binding>
  </wsHttpBinding>
于 2014-09-10T11:00:55.917 に答える