2

なりすましに関するWCFダブルホップの問題について多くの投稿を見てきましたが、特に問題の解決に役立ったものはありません。

私は何が欠けていますか?偽装ユーザー(DOMAIN \ UserName)をサービス2に保持するには、他に何をする必要がありますか?私は確認のためにServiceSecurityContext.Current.WindowsIdentity.Nameを見ています-多分それは間違っています。

セットアップ:

  1. ローカルホストIISでホストされているクライアントアプリとサービス1へのサービス参照-WindowsIdentityの偽装(DOMAIN \ UserName)
  2. サービス1-ローカルホストIISでホストされているWCFサービスとサービス2へのサービス参照
  3. サービス2-ローカルホストIISでホストされているWCFサービス

私は物事を単純にするためにすべてのbasicHttpBindingsを使用しています。両方のサービスエンドポイントにSPNを設定しました。

  • ダブルホップを正常に実行でき、コードは正常に実行されます
  • サービス1(ホップ1)では、ServiceSecurityContext.Current.WindowsIdentityは、私が偽装した人物です(DOMAIN \ UserName)
  • サービス2(ホップ2)では、ServiceSecurityContext.Current.WindowsIdentityはIISアプリプールユーザーです
  • ImpersonationLevel="委任"
  • どちらのWCFサービスでも、Windows認証が有効になっていて匿名が無効になっています

**注:これはすべて、開発ボックスでローカルに実行しています。それでも、自分から自分への委任を許可するように委任レベルを設定しました。多分やり過ぎ。

バインディング(両方のサービスで同様):

<binding name="...">
    <security mode="TransportCredentialOnly">
         <transport clientCredentialType="Windows" />
    </security>
</binding>

WCFサービスクライアントとサービスエンドポイントの動作構成の両方でimpersonationLevel="Delegation"を設定しました。私のサービスメソッドは、impersonationOption = "Allowed"(ホップ1)とimpersonationOption "Required"(ホップ2)で特別に装飾されています。

4

1 に答える 1

1

結局のところ、私の場合の重要な部分は、次の動作属性が設定されていることを確認することでした。

<serviceAuthorization impersonateCallerForAllOperations="true" />

以前、この値を設定すると、Entity Frameworkでエラーが発生したため、設定を元に戻しました。(他のvariosの投稿で説明されているように)セットアップを標準の実装に合わせるという方針のどこかで、最終的にこの属性を設定し、期待どおりに機能させることができたようです。

編集:これはすべてローカルで機能しますが、分散環境では機能しない場合は、この投稿を確認してください:Kerberosダブルホップの問題を修正するにはどうすればよいですか?。おそらく、相互間の委任を信頼するようにマシンを設定する必要があります。

于 2013-03-19T14:17:18.710 に答える