4

net.tcp バインディングで構成された WCF サービスがあります。

<netTcpBinding>
    <binding >
        <security mode="Transport">
            <transport clientCredentialType="Windows" />
            <message clientCredentialType="None" />
        </security>
    </binding>
</netTcpBinding>

私はクライアント - Web アプリケーションを持っています。どちらも同じサーバーの NT AUTHORITY\NETWORK SERVICE で実行されていますが、ポートが異なるだけです。

クライアントがサービスに接続しようとすると、次のエラーが発生します。

System.ComponentModel.Win32Exception: ログオンに失敗しました

これは、クライアント側で servicePrincipalName を指定して修正できます。

<endpoint>
    <identity>
        <servicePrincipalName value="NT AUTHORITY\NETWORK SERVICE" />
    </identity>
</endpoint>

しかし、私はそれを避けることができますか?クライアントに現在のユーザーを使用してもらいたい。

4

1 に答える 1

4

クライアントの構成の servicePrincipalName 値 int endpoint/identity セクションは、クライアントの ID を指定していませんが、予想されるサービス ID を指定しています。WCF 認証は相互に行われることに注意してください (クライアントもサービスを識別します)。

この場合、クライアントは、サービスが「ネットワーク サービス」アカウントで動作していると想定します。

<endpoint>
    <identity>
        <servicePrincipalName value="NT AUTHORITY\NETWORK SERVICE" />
    </identity>
</endpoint>

クライアントとサービスが同じマシン上にある場合、これを次のように置き換えることができます。

<endpoint>
    <identity>
        <servicePrincipalName value="host/localhost" />
    </identity>
</endpoint>

サービス認証は DNS 名 (localhost) に依存するようになりました

于 2013-01-08T09:34:13.413 に答える