2015-09-18 67 views
1

這可能是一個愚蠢的問題,但我在Google上看起來相當困難,無法拿出答案。WebSecurity.IsAuthenticated如何檢查您是否登錄?

我正在創建一個數據庫位於另一個大陸的網站,因此速度是一個至關重要的問題。

據我瞭解,

WebSecurity.Login(form.userName, form.password)) 

首先檢查它的初始設置了數據庫和日誌你如果用戶名和PW是正確的。現在

爲每個後端功能我寫,我堅持一個

[Authorize] 

屬性和

if (WebSecurity.IsAuthenticated) 
{ .... } 
執行任何動作之前

。那麼WebSecurity.IsAuthenticated是否檢查數據庫以檢查它是否已登錄?我只是需要知道速度的原因。

在每個後端方法中放置[Authorize]和WebSecurity.IsAuthenticated也是多餘的嗎?

感謝您的幫助和意見

+2

我相信它只會檢查客戶端是否有認證cookie集。 – HaukurHaf

+0

@HaukurHaf啊完美我想這就是我需要知道的其他冗餘問題之外,至於使用它與[Authorize]屬性相結合 – user1189352

+1

是的,至少這是它在早期實現中的工作原理,例如成員函數。 NET 2我相信。我還認爲,使用[Authorize]屬性裝飾方法和使用WebSecurity.IsAuthenticated進行檢查都是多餘的。 – HaukurHaf

回答

4

正因爲此,在WebSecurity.IsAuthenticated檢查數據庫在所有檢查它是否登錄或不?

不,它只是檢查當前請求中的主體對象是否將認證標誌設置爲true。

通常,主體對象是由認證模塊設置的,因此有幾個不同的模塊。大多數使用cookies堅持通過身份驗證的用戶(例如FormsSessionAuthentication)的信息,如果存在cookie,它是有效的,該模塊設置了,你可以通過調用獲得請求校長:

HttpContext.Current.User 

在你的代碼的任何方法(假設調用是從設置HttpContext.Current的Web應用程序進行的)。

某些認證模塊可以依賴於其他認證因素,例如Windows認證依賴於NTLM/Kerberos協議,而NTLM/Kerberos協議又依賴於特定的頭文件而不是cookie。

而且是它的冗餘把[授權]和WebSecurity.IsAuthenticated在EVERY後端方法

YES和NO。

你最可能的意思是「每個後端方法」是指MVC應用程序中的控制器/操作方法。如果是這樣,,您不必在控制器/操作方法中重複這兩個操作。

但是,在您的後端不是控制器/操作的任何其他方法中,WebSecurity.IsAuthenticated仍然有效,而Action屬性不會。

因此,如果「每個方法」你從字面上的意思是可能的方法,那麼答案是不,這兩個是不是多餘的。一個人總是工作,另一個 - 只在MVC控制器中工作。

1

除了@Wiktor Zychla所說的外,WebSecurity.IsAuthenticated在功能上與Request.IsAuthenticated相同,準確地說,這是一個包裝:

namespace WebMatrix.WebData 
{ 
    //other class content omitted for brevity 
    public static class WebSecurity 
    { 

     //Context 
     internal static HttpContextBase Context 
     { 
      get { return new HttpContextWrapper(HttpContext.Current); } 
     } 

     //Request 
     internal static HttpRequestBase Request 
     { 
      get { return Context.Request; } 
     } 

     //WebSecurity.IsAuthenticated 
     public static bool IsAuthenticated 
     { 
      get { return Request.IsAuthenticated; } 
     } 

    } 
} 

所以,如果你把上面的都在一起,WebSecurity.IsAuthenticated是引擎蓋下等於HttpContextWrapper(HttpContext.Current).Request.IsAuthenticated

旁白:在其他的答案和評論作爲正確地指出,[Authorize]用於指定訪問控制器和操作方法:

指定訪問控制器或動作方法僅限於誰滿足用戶授權要求。 (source

所以IsAuthenticated作品上都行動方法和非操作方法,而[Authorize]只能在控制器和行動方法,使它確實是多餘的行動方法同時使用。