5

IIS 7でホストされているNTLMでbasicHttpBindingを使用するWCF Webサービスがあります(匿名認証が無効で、Windows認証が有効です)。パススルー認証を使用する AppPool。Web サービスにリモートで接続するコンソール アプリケーションがあります。

ドメイン ユーザーを使用して接続すると、プロセスは正常に接続されます。ドメインで作成された新しいサービス アカウントを使用して接続すると、次のエラーが発生します。

HTTP 要求は、クライアント認証方式 'Ntlm' では許可されていません。サーバーから受信した認証ヘッダーは「NTLM」でした。

内部例外は次のとおりです。

リモート サーバーがエラーを返しました: (401) 権限がありません。

これはドメイン アカウントまたは認証スキームの問題ですか? エラー メッセージはそれが認証スキームであることを示していますが、同じドメインで作成されたサービス アカウントではなく、なぜ私のアカウントで機能するのでしょうか?

サーバー構成

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
</security>

クライアント消費

public static WMServiceClient CreateWMServiceProxy()
{
    var proxy = new WMServiceClient();

    proxy.Endpoint.Address = new EndpointAddress( ConfigurationCache.WMServiceEndpoint );
    proxy.Endpoint.Binding = new BasicHttpBinding( BasicHttpSecurityMode.TransportCredentialOnly )
    {
        MaxBufferSize = 2147483647,
        MaxReceivedMessageSize = 2147483647
    };

    ( (BasicHttpBinding) proxy.Endpoint.Binding ).Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;

    return proxy;
}
4

1 に答える 1

1

解決策:これは、私が最初に考えていたようなWCFエラーではありませんでした。内部例外をログに記録すると、「401-Unauthorized」エラーが発生していることがわかりました。私が作成したサービスアカウントには、サービスホストマシンへのリモート接続アクセスが許可されていなかったことがわかりました。アクセスを許可し、ユーザーとしてサービスアカウントを追加すると、プロセスは正しく接続されました。

于 2012-04-26T20:07:12.673 に答える