ASP.NET 應用程序通過 Windows 身份驗證或表單身份驗證對 Active Directory 或 SQL 進行身份驗證
我正在編寫一個需要多種形式的身份驗證的應用程序。
應用程序需要支持對 Active Directory 的身份驗證,但如果使用者不在 Active Directory 中,則能夠故障回復到 SQL 成員資格提供程序。我們可以根據提供的使用者名在程式碼中處理 SQL Provider 的失敗,因為使用者名的格式與 Active Directory 使用者名的格式不同。
這甚至可能嗎?我的意思是,我可以使用會員資格並同時使用 ActiveDirectoryMembershipProvider 和 SqlMembershipProvider 還是我必須自己推出?
另一個額外增加的複雜性是,我想根據 Windows 身份驗證自動將我的內部使用者身份驗證回 AD,但對不在我們內部網路上的使用者或使用 SQL 提供程序的使用者使用表單身份驗證。
這些很可能是單獨的伺服器,一個是內部的,另一個是外部的,所以我有很多計劃要做來弄清楚數據複製,以及如果 AD 使用者訪問外部伺服器等,我將如何對其進行身份驗證。
當我開始走這條路時,我想知道那裡有什麼想法。如果我不自己動手,我想做的事情甚至可能嗎,或者有沒有辦法將它們融合在一起?
謝謝回复。
我最初問的原因是因為我能夠在大約 7 年前使用 IIS 進行身份驗證,然後將憑據傳遞回 Lotus Domino 伺服器 Web 應用程序,從而使這個特定的 senerio 工作。如果使用者未通過 Windows 身份驗證/ISS 進行身份驗證,則 Domino 將處理身份驗證。這就是我在這裡想要做的,但真的想不出一種讓它在 IIS 中工作的方法。
至於您的其餘答复,我認為您正在走我需要採取的方式。我已經考慮過這一點,並在我的腦海中反复折騰。無論如何,兩台伺服器上的應用程序都會有所不同,因為無論如何訪問外部伺服器上的數據都會受到限制。事實上,已經有很多不同了,我可能只是將它們視為兩個應用程序,因此不需要在同一個應用程序中使用兩種類型的身份驗證。
我正在嘗試為外部伺服器編寫自己的身份驗證/登錄視窗的想法,如果使用者嘗試在外部伺服器上使用他們的 AD 憑據登錄,我將能夠檢測到並將它們重定向到內部伺服器。如果他們不在本地網路或 VPN 中,他們將根本無法訪問。這部分仍然有一些思考過程,所以我不確定。
作為一個額外的想法 - 有沒有辦法將足夠的 AD 提取到 SQL 數據庫中,以允許我使用他們的 AD 憑據從外部伺服器對 SQL 數據庫的使用者進行身份驗證,而不會產生任何安全問題?我希望我清楚地輸入我的想法……
再次感謝!
蒂姆
這是我根據此資訊處理類似情況的方式:
- 將應用程序配置為使用表單身份驗證。
- 將 LoginUrl 設置為名為 WinLogin.aspx 的頁面。
- 在 WinLogin.aspx 中,使用 Request.ServerVariables$$ “LOGON_USER” $$要獲取使用者名,然後呼叫 FormsAuthentication.RedirectFromLoginPage(authorizedUserName, false) 將它們登錄。我想您也可以手動檢查 Active Directory。
- 創建一個重定向到名為 Login.aspx 的頁面的 html 頁面
- Login.aspx 是您的標準使用者名/密碼登錄。
- 在 IIS 中,在整個站點上啟用集成身份驗證和匿名,但拒絕對 WinLogin.aspx 的匿名訪問。
- 在 IIS 中,將 401 錯誤設置為在步驟 3 中創建的頁面。
基本上發生的情況是,當未經身份驗證的使用者訪問該站點時,他們會被重定向到 WinLogin.aspx。由於匿名已關閉,因此集成安全性會進行檢查。如果通過,您在 WinLogin 中的自定義程式碼可以執行。如果集成安全檢查失敗,則會出現 401 錯誤。您的自定義 401 頁面重定向到 Login.aspx,使用者可以在其中使用 SQL 提供程序的使用者名和密碼登錄。