8

ホストとクライアントの2つのコンソールプロジェクトを持つ単純なWCFデモアプリを入手しました。両方とも私のマシンで実行されています(7ボックスに勝ちます)。Windows認証を使用するnetTcpBindingを使用しています。

問題は、認証がKerberosからNTLMにダウングレードされていることであり、その理由がわかりません。

使用する場合

<clientCredentials>
   <windows allowNtlm="true" />
</clientCredentials>

クライアント側では、すべてがクールです。しかし、これをに変更するとfalse、次の例外が発生します。

SecurityNegotiationException:リモートサーバーが相互認証要件を満たしていませんでした。

これは、Kerberosが失敗しており、クライアントがNTLMを許可しないため、呼び出しによって例外がスローされることを示しています。

これはプロジェクトの問題ですか、それとも開発マシンの構成に起因する外部の問題ですか?


解決:

どうやら、クライアント構成内でサーバーのIDを指定する必要があります。私の場合、サーバーは私のIDで実行されているので、次のようにクライアントを変更します。

<client>
  <endpoint address="net.tcp://dev7.HurrDurr.com:12345/MyService" 
            binding="netTcpBinding" 
            bindingConfiguration="MyBindingConfigurationLol" 
            behaviorConfiguration="HurrDurrServiceEndpoint" 
            contract="ShaolinCore.ICommunicationService">
    <!-- start changes here -->
    <identity>
      <userPrincipalName value="myusername@mydomain"/>
    </identity>
    <!-- end changes here -->
  </endpoint>
</client>

これで問題が解決する理由がわかりません。さて、クライアント側では、サーバーを完全に信頼しています(ねえ、私はその男を知っています!)。しかし、NTLMはKerberosよりも安全性が低いので、なぜその逆ではないのでしょうか。サーバーを完全に信頼していない場合は、Kerberosを使用します。それ以外の場合は、ntlmで問題ありません。

または、OTOH、サーバーを完全に信頼していない場合、なぜサーバーがまったく機能しないのですか?「SecurityException:エンドポイントIDが設定されていません。WCFはサーバーのIDを信頼できず、クライアントIDを送信しません。」

4

4 に答える 4

8

私が IIS4、5、6 の開発チームで働いていたとき、私たちはこれに何度も遭遇しました! Curb が機能するには、次の条件が満たされている必要があります。

1) 両当事者が縁石をサポートします (サポートされている Windows のすべてのバージョンは現在、縁石をサポートしています)

2) Active Directory に対するマシン認証

3) サーバー エンドポイントに登録されたサービス プリンシパル名 (SPN)。「古き良き時代」には、SetSPN.exe を使用して手動でこれを行う必要がありました。SPN は、Curb が接続する単なるエンドポイントです。相互認証をサポートするには、このデータが必要です。ほとんどのアプリは、適切な API を呼び出してこの作業を行います (DsWriteAccountSpn)

上記の手順のいずれかが当てはまらない場合、通常、Windows はデフォルトで NTLM に設定され、クライアント認証のみが提供されます。

それが役立つことを願っています! - マイケル

于 2010-02-23T22:16:27.643 に答える
2

MSDN 経由の参考情報: netTcpBinding: デフォルトのバインディングは、ネゴシエートされた認証によるトランスポート セキュリティを使用します。このネゴシエーションは Kerberos の使用を試みますが、それが機能しない場合は、フォールバックして古い NTLM プロトコルを使用します。ドメイン環境にいる場合は、Kerberos が最適です。これを使用するには、サービスとクライアントの両方がドメイン アカウントで実行されている必要があります。サービスのサービス プリンシパル名 (SPN) も構成する必要があります。

于 2010-02-23T18:52:48.360 に答える
1

おそらく、MSDN のこのページ - Windows 認証エラーのデバッグ- 何が起こっているのかを理解するのに役立ちます - NTLM と Kerberos がいつ使用されているかについては、非常に難しいようです。

于 2010-02-23T15:18:59.150 に答える
1

サーバーはどのように構成されていますか? 構成ファイルに<authentication mode="Windows"/>andがありますか?<identity impersonate="true"/>

構成ファイルの認証タグを介して認証モードを設定します。

<configuration>
  <system.web>
    <authentication mode="Windows" />
  </system.web>
</configuration>
于 2010-02-23T14:58:07.980 に答える