我發現了一篇MSDN文章,這篇文章可能是我在sequence and workings of the IIS integrated pipeline上看到的最有幫助的文章。但是它提出了關於認證的有趣問題。澄清ASP.NET生命週期事件序列
表單認證在流水線的早期顯示爲「正在執行」。 「執行」處理程序(如ASP.NET MVC路由和控制器執行)將在稍後顯示。但很多時候對於ASP.NET MVC認證故事是這樣的:
public ViewResult Login(LoginModel login)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(...)){
FormsAuthentication.SetAuthCookie(...);
}
}
//...
}
上面的代碼表明,在「執行」處理階段發生(形式)的認證,而不是更早的「身份驗證」 IIS階段。
有人可以澄清這種看似離差嗎?
我個人對此的猜測是,IIS的「身份驗證」階段將執行FormsAuthenticate.Authorize(...),如果沒有成員資格提供商已經配置我指出,如果指示。但是,如果我配置自己的成員資格提供程序,那麼IIS「身份驗證」階段無效 - 並等待「執行」階段,以便我自己的身份驗證代碼可以執行。
如果我的猜測是正確的,那麼如果我配置了自己的成員資格提供程序,這意味着「獲取狀態」IIS階段也不會按預期運行:它將不會「建立」會話,因爲會話獲勝直到我在我的MVC控制器中完成認證步驟後才能建立。或者,也許「身份驗證」和「獲取狀態」相關的應用程序事件將「hold-off」,不會被提出,直到我的控制器執行了它的驗證代碼?
是嗎?沒有?