簡體   English   中英

ASP.NET 混合形式/Windows 身份驗證

[英]ASP.NET Mixed Forms/Windows Authentication

我目前正在開發一個 MVC3 web 應用程序,該應用程序需要要求外網用戶登錄並使用 Forms 身份驗證進行身份驗證。 內網用戶應使用 Windows 身份驗證自動登錄。
我找到了這篇文章http://aspalliance.com/553_Mixed_Mode_Authentication.all但它的日期是 2004 年 11 月,我想找到比 7 年前更近的東西。

我的計划是在 IIS 中有兩個應用程序,虛擬目錄指向同一個物理目錄,但一個允許匿名訪問,另一個不允許。

當用戶在 Windows/Intranet 端進行身份驗證時,我希望簡單地模擬用戶通過 forms 身份驗證登錄。 這種方法有什么陷阱嗎? 有更好的想法嗎?

編輯:2011 年 7 月 22 日

我正在使用 IIS7,它不允許我做舊文章中建議的許多事情。 由於身份驗證在 IIS7 和 ASP.NET web 站點之間集成得更緊密,因此不允許某些事情。 例如,當應用程序的 rest 使用 Forms Auth 時,我無法在單個文件上設置 Windows Auth。

想知道這里的最佳方法是否不是有兩個應用程序,其中第一個應用程序使用 windows 身份驗證,並且僅包含 HTTP 管道中的 PostAuthenticate 事件的掛鈎。 如果用戶通過了身份驗證,則給他們一個 forms 票證並重定向到使用 forms 身份驗證的目標應用程序 App2。 您必須注意 cookies 不是特定於路徑的,並且兩個應用程序駐留在同一服務器上(或者加密密鑰在 web.config 中同步)。 如果用戶未通過身份驗證,您只需在沒有身份驗證票的情況下重定向他們,然后他們在到達 App2 時登錄。

應用程序1:www.myUrl.com\MyApp

這是應用程序的“公共”url,並通過掛鈎 PostAuthenticate 事件來檢測網絡用戶(請參閱Professional ASP.NET 2.0 安全、成員資格和角色管理):

//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
    }
}

應用程序2:www.myUrl.com\MyApp2

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

注意:這樣做的一個缺點是網絡用戶將 App2 加入書簽。 我不太確定如何解決這個問題。 如果他們有一個不會過期的 cookie,那也沒關系。 一種選擇是在登錄頁面上放置一個鏈接,上面寫着“我已經是網絡用戶 - 自動登錄”,這將鏈接回 App1,他們將在哪里登錄?

我有一些代碼可以幫助簽發 forms 票證。 我有時間會更新答案。

請注意,您將不得不在 App2 中做一些花哨的角色管理步驟來處理不同的角色提供者。 上面提到的亞馬遜參考是舊的,但是當我遇到這些自定義身份驗證和授權問題時,我發現自己不斷地參考它。

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

暫無
暫無

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

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