2009-10-22 55 views
9

我有兩個獨立的自制應用程序需要相互溝通。一個是前端應用程序(實際上是asp.net),另一個是會計應用程序的後端接口。後端接口不是專門爲此前端創建的,它是許多其他應用程序用來與我們的產品集成的通用接口。Kerberos,代表團以及如何正確執行此操作?

爲方便用戶,我們希望在我們的前端應用程序中提供Windows身份驗證。這意味着我們需要將憑證傳遞給必須檢查它們的後端應用程序。

我們不希望將我們的前端設置爲後端的「可信」應用程序,它可以以任何用戶身份驗證自己。如果前端遭到黑客入侵,那麼它也會影響後端系統。

據我所知,使用Windows身份驗證的一種方法是Kerberos委派。然而,這需要爲要委派的用戶以及執行委託的機器(服務器與我們的前端)明確啓用。默認情況下,這些選項在Active Directory中處於禁用狀態,我懷疑許多系統管理員對於爲所有用戶啓用這些選項都有所保留。

此外,我不確定這是Kerberos代表團的意圖。我不需要我們的前端模擬正在連接的用戶。我只需要證明這個用戶已經向我證實了自己。

你會如何做到這一點?

+0

什麼是後端身份驗證?你指出前端是Windows集成(所以是內聯網應用程序),但後端應用程序WIA也是? – 2009-10-28 15:04:56

+0

Kerberos _is_爲此 - 例如,我們局域網上的用戶連接到一個網絡服務器,該網絡服務器依次連接到一個SQL Server_使用用戶credentials_。這允許我們根據用戶具有每個表/字段的權限。這裏的困難在於兩個系統都需要了解Kerberos委派 - 獲取各種令牌的網站以及後端根據相同權限驗證它們的網站。我不相信這會直接實現,但您可能能夠在用戶界面和後端之間設置代理感知代理。 – Basic 2013-03-07 19:12:42

回答

0

這是一篇文章,介紹Kerberos如何工作以及如何設置它。

ASP.NET passing along Windows Authentication credentials

+0

恩,是的,那是我的帖子。 :)這是下一個。問題是不同的。你的回答讓我懷疑我是否正確地使用了Kerberos。 – 2009-10-22 13:23:04

+0

opps抱歉太早。我認爲這樣的兩個問題會如此接近,這很奇怪。 – kemiller2002 2009-10-22 13:34:11

0

其實Kerberos委派正是爲此設計的使用情況。但是,這裏面臨的挑戰是在遺留系統上使用這種技術,並使用AD不需要更改的設置。

一個可能的破解是讓前端僅發送用戶和身份驗證時間,但後端可以查詢Active Directory事件日誌以確定該用戶是否已向前端進行身份驗證。這要求您使用WIndows事件日誌API並且還可以使用AD中的事件日誌設置來記錄服務票據的問題。 (我的回憶是這是默認設置) -

+0

我想說這是開放的濫用和越忙的系統,越可能發生虛假認證。它也假設所有的時鐘完全同步(希望是真的,但不能保證) – Basic 2013-03-07 19:09:50

+0

我無法想象這會以安全的方式工作。 – Hogan 2013-09-30 21:06:08

7

我不清楚你可以做什麼,不能做你的用例,但我可以回答問題什麼是Kerberos代表團的意思。

首先讓我們談談Kerberos在委派之前做些什麼。理解這部分很重要,因爲它很微妙。

Kerberos的跨網絡認證的兩個端點之間的通信的BOTH端的身份,這些端點可以是交互式的用戶或服務的計算機上運行。

這是強認證所以它不會允許任何形式的人在這方面的中間人攻擊。如果設置正確,終點可以保證它們不會受到影響。到服務名稱的級別(如果您要連接到計算機上的II,則不同於在同一臺計算機上連接到SQL Server)。它大量使用現代加密技術,並要求使用安全證書。認證協議的細節很複雜,現在還不值得考慮,但它涉及到兩個認證端點和認證服務器(在域控制器是認證服務器的Windows中)之間20個不同的確認步驟。

那麼代表團是什麼?

委派是Microsoft擴展在Kerberos標準,該標準允許 可信源繼續進行認證到另一個 終點。

這使您可以充當「中間人」 - 但許多設置必須明確設置,安裝證書等以使其工作。這遠非簡單。 (編輯:這裏是另一個SO回答有關細節 - https://stackoverflow.com/a/954154/215752

因此,例如,你可以有一個人驗證到網站,然後讓.NET代碼連接到SQL服務器相同的用戶到讀取具有該用戶權限的數據。


現在回答你的問題,因爲我不知道你想做什麼我提出三種選擇:

1)要連接到後端系統爲相同的用戶一個在網站上進行驗證。

  • 在這種情況下,Kerberos委派是完美的 - 它的確如你所願。

2)你想連接到後端系統作爲一個不同的用戶比在網站(例如服務帳戶)驗證的用戶。

  • 在這種情況下,你不希望委派。 Kerberos到網站和Kerberos(作爲一個不同的用戶)到後端將工作得很好。

3)您希望連接到後端系統,在某些時間以SAME用戶的身份連接到其他用戶,並在其他時間連接到不同的用戶。 (例如,您需要驗證這是後端系統的合法用戶,但是要在其他時間以系統帳戶的身份執行受信任的操作。這是(以我的經驗)最常見的用例。)

  • 在這種情況下,您可以同時使用兩者。對需要驗證用戶身份的連接進行委派,然後在您需要系統訪問後端時恢復爲服務帳戶身份。 (我之前的一個問題涉及如何恢復到.NET平臺上的系統身份的詳細信息,請參閱How to "un-impersonate" (un-delegate?) in Kerberos。)
+1

這應該是公認的答案,在專門回答OP之前與許多情況相關的良好概述。 – woody121 2014-01-28 16:10:46

相關問題