web-dev-qa-db-ja.com

HTTPリクエストは、クライアント認証スキーム「ネゴシエート」で許可されていません

1)マシンA上-WCFサービスを作成し、それをホストしましたIIS 5.1、このURLで実行されているMachineA。http://mydomain/SetupPOCService/Service1.svc

2)マシンB上-Asp.netWebアプリケーションを作成しました。このアプリケーションでは、以前に作成したWCFサービスを利用しようとしましたが、現在は別のm/c、つまりMachineAでホストされています。このWebアプリケーションをVisualStudio環境から実行すると、そのMachineAのWCFサービスにアクセスし、データを取得します。

---ここまで罰金---

3)マシンB上-IIS5.1でWebアプリケーションをホストしました。このWebアプリケーションはここでは正常に動作していますが、MachineAのWCFサービスにアクセスできず、この種のエラーが発生します。

リモートサーバーがエラーを返しました:(401)Unauthorized。

StackTrace [MessageSecurityException:HTTP要求はクライアント認証スキーム 'Negotiate'で許可されていません。サーバーから受信した認証ヘッダーは 'Negotiate、NTLM'でした。]

私はたくさんのことを試しましたが、それは役に立ちました。ご意見をお聞かせください...

以下はクライアント用のWeb.Configです

 <security mode="TransportCredentialOnly">
  <transport clientCredentialType="Windows" proxyCredentialType="None"
   realm="" />
  <message clientCredentialType="UserName" algorithmSuite="Default" />
 </security>

以下はサーバー用のWeb.Configです

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

IISに移動します。 「基本設定」と呼ばれるものがあります。アクセス許可とマシンのアクセス許可を追加します。ネットワーク内の一部の境界へのアクセスが許可されていない可能性があります。

  • 「スタート|設定|コントロールパネル|管理ツール|ローカルセキュリティ設定」に移動します。
  • ローカルポリシーに移動|セキュリティオプション
  • ネットワークセキュリティの選択:LanManager認証レベル
  • 「ドロップダウン」送信LMおよびNTLMで2番目の値を選択します.........

また、ClientCredentialType=Windowsは認証ヘッダーをNegotiateにしますが、これはNegotiate, NTLMと連携するには十分ではありません。

ただし、client.ClientCredentials.Windows.AllowNTLM = Trueを設定すると、必要なNTLMが認証ヘッダーに追加され、機能します。

また、万が一の場合に備えて、VSを管理者として実行してみてください。 :)

7
Milee

私の解決策は、ClientCredentialType="Ntlm"を設定することです。

0