2014-07-15 63 views
0

我運行一個服務器的NodeJS一個Windows Server 2008的WWW身份驗證使用NTLM和不支持Kerberos

上的服務器沒有做太多,但我設置頁眉爲401,WWW驗證談判,我知道可以使用默認的Kerberos身份驗證,也可以使用NTLM進行身份驗證。

我下載了fiddler,發現當我嘗試訪問服務器時,它嘗試使用NTLM(提示我輸入用戶名和密碼)而不是Kerberos進行身份驗證,即使計算機與服務器位於同一個域中,運行命令「klist」它確實表明他有令牌,這意味着他已經使用Kerberos進行了身份驗證(不是嗎?)。

我的問題是我如何使用Kerberos而不是NTLM進行身份驗證 - 爲什麼他首先要去NTLM?

任何想法?

+0

是否爲服務器註冊了SPN? –

+0

我認爲是這樣,但我真的不知道該怎麼做。我的意思是我做了spnset,但在做完之後,我想要做什麼?我甚至不確定我是否誠實。 – user3467713

回答

1

您的客戶可能無法獲得該機器的服務器故障單。使用Wireshark並檢查Kerberos TGS-REQ消息。請搜索我的類似答案,我已經能夠在這種情況下提供幫助。

+0

我似乎無法找到與Kerberos TGS-REQ相關的任何內容。它只是401未經授權,然後NTLMSSP_NEGOTIATE。 – user3467713

+0

NTLMSSP_NEGOTIATE是誰? –

0

很可能,您需要閱讀Kerberos。您可能有TGT(票證授予票證),證明您已通過AD(KDC)認證。您仍然需要針對特定​​服務/服務器實例的ST(服務票證)。 HTTP /服務器名。爲此,您需要爲該服務註冊一個SPN。 SPN必須註冊到將解密ST的賬戶。

顯示您不發送ST的提琴手顯示您沒有收到ST。你可能需要一個嗅探器,而不僅僅是小提琴手。您將在端口88上看到您的工作站嘗試從KDC請求ST,然後失敗,然後回退到NTLM。你想看到ST req找回ST。

這是一個偉大的首發,儘管從2000年http://technet.microsoft.com/en-us/library/bb742431.aspx

是更有意義的幫助,我需要看到你的應用程序的網址,通過SETSPN -l你的SPN的信息,以及服務器的主機名。

+0

即時通訊與ip地址「10.0.0.19:3000」衝浪到應用程序是甚至好?我註冊了一個像這樣的SPN「setspn -s HTTP/kerb.name.com:3000 curb」。這是什麼setspn -l給出:「註冊ServicePrinicpalNames爲CN =服務器,CN =計算機,DC =名稱,DC = com:http/kerb.name.com」和DC:\\ WIN-7II7OV492KP.name.com。這是足夠的信息嗎? – user3467713

+0

當您在瀏覽器中使用它時,SPN需要與URL的FQDN部分保持一致。你可能想要做一個setspn -s HTTP/10.0.0.19:3000的路由器。帳號是否可以運行您的Web服務器?這是否在IIS之上運行?如果你正確設置了spn,你至少可以從KDC中獲得它。如果您在此之後失敗,那麼您知道您的Web服務器正在運行的身份存在問題。 – markgamache

+0

是的帳戶是一個運行服務器。我也將下載嗅探器,並嘗試更好地設置SPN,看看它做了什麼。我會告訴你。非常感謝你。 – user3467713

0

由於這沒有被標記爲固定的,我想我會添加一個解決方案,爲我工作。 YMMV和我的環境一樣,我們有多個擁有信任關係的森林。

在我的情況下,運行瀏覽器的用戶(並因此使HTTP GET)在DOMA中,但Web服務器已連接到DOMB。當客戶試圖找到HTTP/webserver.domainb.example.com的SPN時,它正在DOMA中尋找它。

我錯誤地認爲,因爲DOMA和DOMB之間存在雙向信任關係,所以它會在DOMB中查找並執行此操作。不幸的是,它不,你必須Configure Kerberos Forest Search Order。這可以在Windows 7上或每個KDC(計算機配置→策略→管理模板→系統→KDC→使用森林搜索順序)上爲每個客戶端完成(計算機配置→策略→管理模板→系統→Kerberos→使用森林搜索順序) Windows Server 2008R2。

注意:Michael-O建議使用Wireshark並查找TGS-REQ消息,這讓我發現KFSO設置非常感謝他。