3

サーバー B で WCF サービス (K2 ワークフロー) を呼び出す Web アプリをサーバー A で実行しており、呼び出し元のユーザーとして実行するために偽装/委任が必要です。サーバー A から Web アプリを実行すると、アプリはうまく機能します。デバッグでローカル PC からアプリを実行すると、うまく機能します。PC のブラウザーからサーバー A にアプリをヒットすると、次のエラーが表示されます。

HTTP 要求は、クライアント認証方式 'Ntlm' では許可されていません。サーバーから受信した認証ヘッダーは「Ntlm,Negotiate」でした。System.Net.WebException: リモート サーバーがエラーを返しました: (401) 権限がありません。System.Net.HttpWebRequest.GetResponse() で System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan タイムアウト) で。

次のコードを使用してサービスを実行します。

SvcWorklist.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation;
SvcWorklist.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;

私はすべてをやったような気がします。ここに私が試したことのリストがあります:

  1. サーバーAアプリプールドメインユーザーによるサーバーBへのSPN(ポートを含む)のセットアップ(NETBIOSおよびFQDN)
    1. サーバー A とサーバー B でアプリ プール ユーザーと同じドメイン ユーザーを設定します。
    2. アプリケーション プール ユーザーが Active Directory で委任できることを確認します
    3. 両方のサーバーが AD で委任できるようにする
    4. サーバー A の web.config で認証を windows に設定し、impersonate=true に設定します。
    5. Thread.CurrentPrincipal.Identity.Name に自分のユーザー ID があることを確認
    6. IIS が Windows と偽装用に設定されていることを確認
    7. サーバーAおよびBのIIS構成をNtlmおよび/またはネゴシエートのみに制限しようとしました

どんな助けやアイデアも本当に感謝しています。

4

1 に答える 1