2011-12-15 9 views
10

後でユーザーを偽装するためにKerberosチケットを保存することはできますか?後で偽装するためにKerberos認証を保存する

私は、ユーザーが外部システムを直接呼び出してデータを処理するシナリオを持っています。外部システムは、ADで偽装/認証されているユーザーに依存しています。

これで、キューがユーザーと外部システムの間にあり、キューからの作業がWindowsサービスによってそのキューから外部システムに引き渡されるように、呼び出しシステムを変更する必要があります。 このサービスは、外部システムがユーザー権利を正しく処理できるように、ユーザーを偽装する必要があります。

外部システムを変更できないため、ユーザー名とパスワードをキューに保存できないため、ユーザーがキューに新しい作業項目を追加した後にサービスでユーザーを偽装すると、Kerberosチケットを保存できますかそのデータを外部システムに渡すときに使用されます。 C#でどうすればいいですか?

+1

サービスで使用しているキューの種類はありますか?システムメッセージキュー、MSMQ?使用しているキューがRPCに基づいている場合、サービスがエンドユーザーを偽装する可能性があるためです。 – JPBlanc

+0

SQL Service Brokerキュー。 – GaussZ

答えて

0

保存することは可能かもしれませんが、チケットは短期間で保存されると思います。残念ながら、ネットワーク上に適切な委任が設定されていない限り、サービスからサービスへの認証が失敗するKerberos double-hop issueに確実に入ります。これには、アクティブディレクトリにいくつかのSPN(サービスプリンシパル名)を設定して、サーバー間で相互に信頼するように指示する必要があります。

私は決してKerberosのチケットを保存しようとしたことはありません。そのため、委任とSPNを使って戦っても機能しない可能性があります。

ここには、IIS7 to handle double hop Kerberos ticketshandling it from the networks point of viewという別の記事を設定する簡単な記事があります。

私はもっと助けて記事を書くのではなく、記事を投稿することができればいいと思っていますが、あなたが調査したところでは、これがKerberos認証の悩みであることがわかります。がんばろう!

+0

コメントをいただきありがとうございますが、ダブルホップの問題には注意が必要です。欠落しているのは、Kerberosチケットをコードに入れて、後で再偽装するために保存することだけです。 – GaussZ

+0

保存したいときはどのくらい話していますか?分、カップル時間?私が覚えていれば、チケットの有効期限は5分です。 – Joshua

+0

Kerberosチケットのデフォルトの有効期間は10時間です。 afaikを更新することでそれも延長することができます。あなたはどこから5分制限を得ましたか? – GaussZ

1
  • 編集:これは私があなたの実際の質問に得ることができる最も近いです:あなたはしかし長くそれが取る、そこからの要求を行い、偽装の下に別のスレッドを起動することはできますか?カバーの下では、これは必要なことを行います(サービスプロセスが終了しない限り)。

マイクロソフトの男は、「セキュリティは、アプリケーションを展開するときにアプリケーションを停止させるものです」と言いました。 (彼のポイントは、現実的なセキュリティ設定でテストすることでした)。

チケットの有効期間は10時間ですが、発行日からの時間です。ユーザーがリクエストを行うまでに残っている部分のほんの一部しかない場合があります。

基本的な問題を単純に別の方法で解決することをお勧めします。

なぜキューに入れなければならないのですか?ピーク時に外部サービスが停止するためですか?

  • ハードウェアをアップまたはスケールアウトできますか?通常最も安い方法。
  • 実際に完全に別個の権限を持っているのですか、またはユーザーのスロットを有限数の役割にしていますか?役割の場合は、ユーザーの役割を記録し、外部サービスにアクセスするために特別に作成されたユーザー名を使用できます(役割ごとに1つ)。
  • 外部サービスはあなたのものですか?Windowsのなりすましに依存しない「ボブになるふりをする」オプションを追加できますか?
  • 偽装の下で別のスレッドを開始できますか、そこから要求を行いますか?その後、それをユーザーに郵送しますか? (はい、これはあなたの尋ねることをしているカバーの下にあります)
  • 最後に、ユーザーをブラウザーの配給待ち行列に入れることができます。私。数字でそれらを発行してから、ブラウザを10秒ごとにリフレッシュさせて(またはAjaxを使用して)、待ち行列にいる人の数を先に伝えます。自分の番になったら、実際のリクエストを偽装します。 (これにより、キュー内で待っている間にブラウザーウィンドウを開いたままにする必要があります。また、未処理の要求やアクティブなブラウザーと、離れたブラウザーを追跡する必要があります)。厄介ですが、うまくいくでしょう。
  • 実際の問題を知らずに、このようにしないと言っている以外に、アドバイスするのは難しいです。

    +0

    キューは複数の要件/制限のために選択されました(サービスは24時間365日利用できませんが、アイテムはキューに追加する必要があります。キューは信頼できるものでなければなりません。クライアントは外部サービスの作業を追加する必要がありますが、作業が開始または終了する前にログオフすることができます) 外部サービスは自分の管理下にないため、「ふりをする」オプションを追加できません。 チケットの有効期間は短くても、最大10時間を超えて更新することができます。 TL:DR:キューが必要です。再起動後もすべての解決策が残っていなければなりません。 – GaussZ

    +0

    @GaussZ:リブートに耐えられる解決策は、恐ろしいセキュリティホールです。それについて考える。これはやりにくい理由があります。それは良い考えではないからです。私はあなたがTL; DRを私の他の提案に言ったことを知っていますが、多分あなたは時間を取るべきです。提案1または2があなたのベストベットです。 – Ben

    +0

    もちろん、すべてのアクセス権のセキュリティホールであってはいけません。そのため、Kerberosトークンのアプローチが好まれています。誰かがサーバーを侵害し、キューに格納されているKerberosトークンを使用している場合、彼はすでにWebサービスを危険にさらしてトークンを使用して送信します。 私は別のアプローチも使いたいと思いますし、あなたの提案には感謝していますが、制限がある(特に外部システムを変更できない)ので、このアイデアは私を最良の選択肢として襲いました。 – GaussZ

    0

    このソリューションは、巨大な警告が付属していますが、その代わりに、トークン/チケットを格納するので、あなたが資格情報を提供ずに偽装のトークンを取得するためにLsaLogonUser機能と制約付き委任を使用することができ、現時点では作業はする準備ができていますデキューされます。

    これは、内部リソースへのアクセスを偽装されたドメインユーザーにWindows以外の資格情報(パブリックWebサイトなど)をマップできるプロトコルの移行方法です。

    これは明らかに巨大な潜在的なセキュリティホールであり、LsaLogonUserを呼び出すプロセスを実行するアカウントにはSeTcbPrivilege(「オペレーティングシステムの一部として機能する」)を付与する必要があります。

    チケットを保管する方法があれば、明らかにはるかに良いでしょうが、私が質問したときに最初に思ったのは、@ベンが述べた有効期限問題です。

    編集: A coupleexcellent articlesexcellent articlesプロトコルの移行と制限された委任については、リスクの広範な範囲をカバーしています。

    関連する問題