2012-08-25 191 views
8

我正在使用表單身份驗證的網站上工作。我感興趣的是認證系統是如何工作的,因爲當我最初打開網站中的任何頁面時,它將我重定向到登錄名,並且沒有任何控制器/操作在其中存在任何授權邏輯ASP.NET MVC Forms身份驗證 - 它如何工作並保持身份驗證?

  • 通過下面的配置,MVC或ASP.NET自動確定您是否通過身份驗證? (就像我說的,在控制器中沒有代碼來「重定向」或確保用戶被授權。
  • 如果ASP.NET處理這個問題,在什麼情況下你需要授權 你的動作/控制器?即[授權]屬性)
  • 如何窗體身份驗證的工作我如何 的「授權」持久化特別感興趣(即餅乾?)

網站的web.config 技術:??MVC 3,實體框架4.1(代碼優先),ASP.NET 4

<configuration> 
<system.web> 
     <authentication mode="Forms"> 
      <forms loginUrl="~/Account/Index" timeout="2880" /> 
     </authentication> 

     <membership defaultProvider="CodeFirstMembershipProvider"> 
      <providers>c 
      <clear /> 
      <add name="CodeFirstMembershipProvider" type="Vanguard.AssetManager.Services.Security.MembershipService" applicationName="/" /> 
      </providers> 
     </membership> 

     <roleManager enabled="true" defaultProvider="CodeFirstRoleProvider"> 
      <providers> 
      <clear /> 
      <add name="CodeFirstRoleProvider" type="Vanguard.AssetManager.Services.Security.RoleService" applicationName="/" /> 
      <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" /> 
      </providers> 
     </roleManager> 

     </system.web> 

     <location path="Admin"> 
     <system.web> 
      <authorization> 
      <allow roles="Admin" /> 
      <deny users="*" /> 
      </authorization> 
     </system.web> 
     </location> 


     <location path="Content/packages"> 
     <system.web> 
      <authorization> 
      <allow roles="Admin" /> 
      <deny users="*" /> 
      </authorization> 
     </system.web> 
     </location> 

     <location path="Home"> 
     <system.web> 
      <authorization> 
      <deny users="?" /> 
      </authorization> 
     </system.web> 
     </location> 

     <location path="CheckIn"> 
     <system.web> 
      <authorization> 
      <allow roles="CheckIn, Admin" /> 
      <deny users="*" /> 
      </authorization> 
     </system.web> 
     </location> 

     <location path="Assignment"> 
     <system.web> 
      <authorization> 
      <allow roles="Assignment, Admin" /> 
      <deny users="*" /> 
      </authorization> 
     </system.web> 
     </location> 
<configuration> 

該網站使用MVC領域,我認爲這是該部分所指的。

回答

8

通過下面的配置,MVC或ASP.NET自動確定您是否經過身份驗證? (就像我說的,沒有代碼 控制器到「重定向」或確保用戶 授權。

是,它使用在你的web.config中<location>部分,只允許該用戶具有管理員角色訪問/Admin/*路徑。

如果ASP.NET處理這一點,在什麼情況下,你需要授權 你的行動/控制器?(即[授權]屬性)

在ASP.NET MVC中,使用[Authorize]屬性是控制哪些操作需要授權的首選方法,而不是像您那樣在web.config中使用<location>標記。原因是ASP.NET MVC使用路由,而且你不應該在web.config中硬編碼路徑,這是<location>部分發生的情況。因此,請始終使用[Authorize]屬性來修飾需要驗證的控制器/操作。

表單身份驗證如何工作?我對 「授權」是如何持續特別感興趣? (即餅乾)

餅乾,是的。您也可以在MSDN上籤出following article,它解釋了Forms身份驗證的工作原理。