2

WindowsサービスでホストされるWCFサービスを作成しました。デプロイされているか、ローカルホストが正常に機能している場合、クライアントアプリはそれを消費できます。

Windowsサービスのログオン設定を変更してドメインユーザーを設定すると(デフォルトの「ローカルシステム」から変更)、クライアントアプリはサービスを利用できなくなります。私が得る例外は

A call to SSPI failed

内部の例外や詳細はありません。これを修正するために、有効なサービス名チェックを取得するために、クライアントアプリリクエストでUPNを設定しようとしました。これは、クライアント側で、コードを介して、エンドポイントにIDを設定して行われます。

string uri = "myServiceUri";
EndpointIdentity identity = EndpointIdentity.CreateSpnIdentity("user@domain");
EndpointAddress epa = new EndpointAddress(uri, identity, new AddressHeader[] { });

非常に奇妙な振る舞いがあります。

  • クライアントリクエストで正確なUPNを設定すると、たとえば「user @ domain」とすると、新しい例外が発生します(内部例外なし、詳細なし)

    The following remote identity failed verification: 'user@domain'
    
  • クライアントリクエストで他の文字列をUPNとして設定すると、正常に機能します。たとえば、「XXXuser @ domainXXX」、「toto」、さらにはString.Emptyなどです。

サーバー側では、デフォルトの動作、つまりUPNチェック(SPNもDNSもなし)を維持するように構成ファイルにIDノードを設定しませんでした。

つまり、サービス/ユーザー名のチェックは、クライアントアプリの設定が間違っている場合にのみ機能するようです。

親愛なるコミュニティ、このトピックについてあなたの助けをいただければ幸いです。

ありがとう

4

2 に答える 2

4

解決策は... WCFにUPNを適切に処理させるCreateUpnIdentity代わりに使用します。CreateSpnIdentity

その理由は、サーバー構成ファイルにIdentity ノードがなく、サービス ユーザーとしてドメイン アカウントがある場合、サービスによって公開される既定の ID は UPN "account@domain" であるためです。

于 2012-07-24T17:19:23.850 に答える
0

存在しない UPN を使用すると、認証が強制的に Kerberos から NTLM にフォールバックされることを思い出すようです。Kerberos をドメイン アカウントで動作させるには、ターゲット アカウントの SPN を構成する必要があると思います: http://msdn.microsoft.com/en-us/library/bb628618.aspx

于 2012-07-24T12:50:41.390 に答える