2016-12-03 69 views
2

我試圖在小型Web服務器中實現Negotiate(至少是Kerberos部分)。我已經想出瞭如何讓客戶端向我發送Kerberos協商授權標頭。我已經想出瞭如何解碼這些數據(ASN.1)。我無法弄清楚如何將它變成WindowsIdentity。我可以從KerberosReceiverSecurityToken得到一個大概的想法,但我找不到像NegotiateReceiverSecurityToken這樣的東西。我一直在挖掘大量的DLL,並且我不能在我的生活中找出IIS/.NET處理Negotiate頭的位置。如何處理.NET中的協商?

我相信(如果我有我自己的SspiWrapper),我會做一些與SspiWrapper.AcquireDefaultCredential("Negotiate", CredentialUse.Inbound)收購與我可以打電話給AcceptSecurityContext/Negotiate然後用QuerySecurityContextToken得到與我可以創建一個WindowsIdentity令牌的SSPI上下文。

KerberosReceiverSecurityToken使這看起來像一個非常複雜的過程。並沒有任何想法知道如何做到這一點或授權頭部有效載荷的哪個部分,我可能會在一個月內反對它,而沒有得到任何地方。 (在你提出或回答之前,我完全沒有興趣使用內置的Negotiate邏輯,如果我能找到它,我可以從中學習,但是我一直試圖讓它爲FAR工作長。而我與該完成的。)

+2

你必須參考微軟的Katana/Kestrel web服務器源代碼repo來了解他們調用哪個本地API。這是一個相當廣泛的問題,我正在投票結束。如果您打算自己創建,Microsoft會在其網站上發佈標準文檔,您最好是Google。 –

+0

@LexLi我的問題如何廣泛?我想從客戶端將數據發送到我的服務器,並將其轉換爲WindowsPrincipal。似乎對我來說很特別。 –

+1

協議客戶端實現是一個巨大的項目,您期望Stack Overflow中的線程提供多少? –

回答

2
  1. 解析傳入響應令牌
  2. 呼叫Secur32.AcquireCredentialsHandle得到一個手柄
  3. 呼叫Secur32.AcceptSecurityContext通過手柄和令牌
  4. 呼叫Secur32.QuerySecurityContextToken通過安全上下文
  5. 構建new WindowsIdentity(hToken)使用輸出形式步驟4

如果對任何這些步驟的任何問題,我可以闡述和/或提供一些示例代碼。

+0

謝謝你的回答。當我有一些時間時,我會嘗試用這個來解決我的問題。那麼我會盡快回復你。 –