2016-12-03 19 views
2

私は小さなWebサーバーにNegotiate(少なくともKerberosの部分)を実装しようとしています。 Kerberos Negotiate Authorizationヘッダーをクライアントに送信する方法を知りました。私はそのデータをどのようにデコードするかを考え出しました(ASN.1)。私はこれをWindowsIdentityにする方法を理解できません。私はKerberosReceiverSecurityTokenからの可能性について一般的な考えを得ることができますが、NegotiateReceiverSecurityTokenのようなものは見つかりません。私は多くのDLLを掘り下げてきましたが、IIS/.NETがどこでNegotiateヘッダーを処理するのか分かりません。.NETでNegotiateを処理するにはどうすればよいですか?

私はAcceptSecurityContext/Negotiateを呼び出してから、私はWindowsIdentityを作成する可能性があるとのトークンを取得するためにQuerySecurityContextTokenを使用することができたとSSPIコンテキストを取得するためにSspiWrapper.AcquireDefaultCredential("Negotiate", CredentialUse.Inbound)で何かをすることを(私はSspiWrapper自分を持っていた場合)私は推測。

しかし、KerberosReceiverSecurityTokenは非常に複雑なプロセスのように見えます。それをどうやって行うのか、Authorizationヘッダーのペイロードのどの部分を入れるのか分からずに、私はおそらくどこにも行かずに1か月間頭を打つことができました。

(私がそれを見つけることができれば私はそれを学ぶだろうが、私はそれをFARのために働かせようとしてきた。長い。そして、私はそれで終わりだ。)

+2

Microsoftが提供するKatana/Kestrel Webサーバーのソースコードレポを参照して、それらが呼び出すネイティブAPIを知る必要があります。それは私が閉会することを議論している広い質問です。独自のものを作成するつもりなら、マイクロソフトは自分のサイトで標準文書を公開しています。 –

+0

@LexLi私の質問はどのように広がっていますか?サーバーからクライアントに送信されたデータをWindowsPrincipalに変換したいと考えています。私に特有のものだと思う。 –

+1

プロトコルクライアントの実装は巨大なプロジェクトであり、Stack Overflowのスレッドがどれくらいのパフォーマンスを期待していますか? –

答えて

2
  1. は、ハンドルとセキュリティを渡すトークン
  2. コールSecur32.QuerySecurityContextTokenを渡すハンドル
  3. コールSecur32.AcceptSecurityContextを取得するには、着信応答トークン
  4. コールSecur32.AcquireCredentialsHandleを解析します文脈
  5. は、次の手順のいずれかについて質問がある場合は、私は手の込んだことができ、出力フォームステップ4

を使用してnew WindowsIdentity(hToken)構築および/またはいくつかのサンプルコードを提供しています。

+0

あなたの答えをありがとう。私はしばらくすると、これを使って自分の問題を解決しようとします。私はあなたに戻ってきます。 –

関連する問題