簡體   English   中英

ASP.NET應用程序通過Windows身份驗證或表單身份驗證對Active Directory或SQL進行身份驗證

[英]ASP.NET Application to authenticate to Active Directory or SQL via Windows Authentication or Forms Authentication

我正在編寫一個需要多種身份驗證形式的應用程序。

應用程序需要支持對Active Directory的身份驗證,但如果用戶不在Active Directory中,則能夠故障回復到SQL成員資格提供程序。 我們可以根據提供的用戶名處理代碼中SQL提供程序的失敗,因為用戶名將是與Active Directory用戶名不同的格式。

這甚至可能嗎? 我的意思是,我可以使用成員資格並同時使用ActiveDirectoryMembershipProvider和SqlMembershipProvider,還是我必須自己動手?

另一個額外增加的復雜性是我希望自動將基於Windows身份驗證的內部用戶驗證回AD,但對不在我們內部網絡上的用戶或使用SQL提供程序的用戶使用表單身份驗證。

這些很可能是單獨的服務器,一個是內部服務器,另一個是外部服務器,因此我有很多計划要弄清楚數據復制,以及如果AD用戶訪問外部服務器等,我將如何對其進行身份驗證。

當我開始走這條路時,我想知道那里有什么想法。 如果沒有我自己的想法,我想要做什么,或者有沒有辦法將它們融合在一起?


謝謝回復。

我最初問的原因是因為我能夠在大約7年前使用IIS進行身份驗證,然后將憑據傳遞回Lotus Domino Server Web App,從而使這個特定的senerio工作。 如果用戶未通過Windows身份驗證/ ISS進行身份驗證,則Domino將處理身份驗證。 這就是我在這里要做的事情,但實在想不出讓它在IIS中運行的方法。

至於你的其他答復,我認為你已經采取了我需要采取的方式。 我已經想到了這一點,並把它扔在了我腦海里。 無論如何,應用程序在兩台服務器上會有所不同,因為無論如何都會限制對外部服務器上的數據的訪問。 事實上,這種情況將會有所不同,我可能只將它們視為兩個應用程序,從而無需在同一個應用程序中使用兩種類型的身份驗證。

我正在嘗試為外部服務器編寫自己的身份驗證/登錄窗口,如果用戶嘗試使用外部服務器上的AD憑據登錄,我將能夠檢測到並將其重定向到內部服務器。 如果他們不在本地網絡或VPN上,他們將無法訪問。 這部分仍然有一些思考過程,所以我不確定。

另外一個想法 - 是否有一種方法可以將足夠的AD拉入SQL數據庫,以允許我使用其AD憑據從外部服務器對SQL數據庫的用戶進行身份驗證,而不會產生任何安全問題? 我希望我能清楚地輸入我的想法....

再次感謝!

蒂姆

這是我基於這個信息處理類似情況的方式:

  1. 配置應用程序以使用Forms身份驗證。
  2. 將LoginUrl設置為名為WinLogin.aspx的頁面。
  3. 在WinLogin.aspx中,使用Request.ServerVariables [“LOGON_USER”]獲取用戶名,然后調用FormsAuthentication.RedirectFromLoginPage(authorizedUserName,false)將其登錄。我猜你也可以手動檢查Active Directory作為這一點。
  4. 創建一個重定向到名為Login.aspx的頁面的html頁面
  5. Login.aspx是您的標准用戶名/密碼登錄。
  6. 在IIS中,在整個站點上啟用集成身份驗證和匿名,但拒絕匿名訪問WinLogin.aspx。
  7. 在IIS中,將401錯誤設置為在步驟3中創建的頁面。

基本上發生的是當一個未經過身份驗證的用戶訪問該網站時,他們會被重定向到WinLogin.aspx。 由於匿名被關閉,集成安全性會進行檢查。 如果通過,WinLogin中的自定義代碼可以運行。 如果集成安全檢查失敗,則會發生401錯誤。 您的自定義401頁面重定向到Login.aspx,用戶可以使用SQL提供程序的用戶名和密碼登錄。

據我所知,Web應用程序配置為使用Windows身份驗證或表單身份驗證,但不能同時使用兩者。 因此,我不認為可以自動驗證內部用戶,同時要求其他人輸入用戶名/密碼。

您可以使用自定義提供程序通過Forms身份驗證對Active Directory或SQL用戶存儲進行身份驗證。 但是,AD用戶仍需要輸入用戶名和密碼。 雖然我從未將這兩種方法結合起來,但我已經使用Forms身份驗證來同時對兩個源進行身份驗證。

話雖如此,我認為您可能需要考慮降低系統的“靈活性”。 如果您有面向外部的服務器和面向內部的服務器,則只需更改應用程序的每個副本上的提供程序配置即可針對其他來源。 然后,您可以將內部配置為使用Windows(自動)身份驗證,將外部配置為使用Forms身份驗證。

恕我直言,我認為內部用戶不應該使用外部服務器來訪問應用程序。 如果是,則應將用戶帳戶存儲在SQL中,並與其AD帳戶完全分開。 基本上,當有人從外部訪問應用程序時,無論其物理位置如何,它們都充當外部用戶。

好吧,可以使用ActiveDirectoryMembershipProvider和SqlMembershipProvider,但這需要您使用自己的代碼而不是Login控件設計登錄頁面。

關於混合身份驗證(Windows和Forms),據我所知只有IIS 7使它變得簡單和干凈。 有關詳細信息,請參閱此帖

http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM