2011-07-20 117 views
10

我目前正在開發一個MVC3的Web應用程序,需要外部網用戶登錄和使用窗體身份驗證進行身份驗證。 Intranet用戶應該使用Windows身份驗證自動登錄。
我發現這篇文章, http://aspalliance.com/553_Mixed_Mode_Authentication.all 但它的日期2004年11月,喜歡找東西寫比7年前更近。ASP.NET混合形式/ Windows身份驗證

我的計劃是在IIS兩個應用程序,在同一物理目錄指向虛擬目錄,而是一個將允許匿名訪問和其他不會。

當用戶對事物的的Windows/Intranet的端認證的,我希望能簡單地模擬用戶通過窗體身份驗證登錄。這種方法有沒有陷阱?任何更好的想法?

編輯:2011/7/22

我使用IIS7這不會讓我做很多的舊文章建議的事情。由於身份驗證在IIS7和ASP.NET網站之間集成得比較嚴格,因此不允許使用某些內容。例如,我不能在單個文件上設置Windows身份驗證,而應用程序的其餘部分使用Forms Auth。

+0

你打算如何模擬用戶使用表單登錄?你打算在ASP會員表中爲他們創建用戶嗎? – Erix

+0

是的。每個Windows用戶都將擁有對應於asp成員資格中的用戶的角色(Windows中的組)。因此,如果他們在Windows中的管理員組中,他們將以管理員用戶身份登錄到Forms中。對於Windows用戶,只有與ASP成員表中的用戶一樣多的角色,每個角色都有一對一的關係(用戶到角色)。 –

回答

3

想知道這裏最好的辦法不會有其中第一個應用程序使用Windows身份驗證兩個應用程序並只包括一個鉤在HTTP管道PostAuthenticate事件。如果用戶已通過身份驗證,則會爲他們提供表單工單並重定向到使用表單身份驗證的目標應用程序App2。您必須小心,Cookie不是路徑特定的,並且兩個應用程序駐留在同一臺服務器上(或者加密密鑰在web.config中同步)。如果用戶未通過身份驗證,則只需重定向他們,而不需要身份驗證票,並在到達App2時登錄。

應用1:www.myUrl.com \ MyApp的

這是該應用的 「公共」 的網址,並通過掛鉤到PostAuthenticate事件檢測網絡用戶(見Professional ASP.NET 2.0 Security, Membership, and Role Management):

//Hook PostAuthenticateRequest inside of global.asax 
void Application_PostAuthenticateRequest(Object sender, EventArgs e) 
{ 
    IPrincipal p = HttpContext.Current.User; 

    if (p.Identity.IsAuthenticated) 
    { 
     // to do: give them a non-path specific ticket and redirect to App2 
    } 
} 

App2:www.myUrl.com \ MyApp2

這是實際應用。當網絡用戶從App1到達時,他們已經有表格票。當非網絡用戶到達時,他們將被重定向到login.aspx。

備註: 如果網絡用戶爲App2書籤,其中一個缺點是。我不太清楚我將如何解決這個問題。如果他們有一個沒有過期的cookie,那麼沒關係。一種選擇是在登錄頁面上添加一個鏈接,說明「我已經是網絡用戶 - 自動登錄我」,它將鏈接回App1,他們將在那裏登錄?

我有一些代碼來協助發佈表格票。我會隨時更新答案。

請注意,你將不得不做一些花哨的角色管理步法的應用2來處理不同的角色提供。上面的亞馬遜參考文獻是舊的,但是當我遇到這些自定義的認證和授權問題時,我發現自己經常引用它。

+0

感謝您輸入Brett。網絡用戶的登錄並不重要,但客戶需要登錄。當我必須實現這個功能時,我會繼續考慮我的選項,包括你的選項。 –

+0

我幾乎走了這條路。要克服很多障礙,但它大部分都有效。我將Windows驗證網站(Site1)的URL添加到本地Intranet站點域,以便用戶自動登錄,然後重定向到Site2。 –

0

這是完全可能的,如果您將在IIS中創建兩個不同的應用程序,那麼您的工作就完成了! =)

+0

不適用於IIS7。當您將IIS7中的應用程序從Forms更改爲Windows身份驗證(反之亦然)時,它會修改該項目的WebConfig。我將有兩個應用程序,但它們都將指向文件中的同一物理目錄。在一個應用程序中更改身份驗證類型會影響其他身份。 –