Asp.net

ASP.NET MVC Forms 身份驗證 - 它如何工作並保持身份驗證?

  • August 25, 2012

我正在使用表單身份驗證的網站上工作。我對身份驗證系統的工作方式很感興趣,因為當我最初打開站點中的任何頁面時,它會將我重定向到登錄名,並且沒有任何控制器/操作在其中放置任何授權邏輯

  • 通過下面的配置,MVC 或 ASP.NET 是否會自動確定您是否通過了身份驗證?(就像我說的,控制器中沒有程式碼可以“重定向”或確保使用者被授權。
  • 如果 ASP.NET 處理這個問題,在什麼情況下您需要授權您的操作/控制器?(IE$$ Authorize $$屬性)
  • 表單身份驗證如何工作?我對如何保持“授權”特別感興趣?(即餅乾??)

網站 web.config 技術:MVC 3、Entity Framework 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 區域,我認為這就是該部分所指的內容。

通過下面的配置,MVC 或 ASP.NET 是否會自動確定您是否通過了身份驗證?(就像我說的,控制器中沒有程式碼可以“重定向”或確保使用者被授權。

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

如果 ASP.NET 處理這個問題,在什麼情況下您需要授權您的操作/控制器?(IE

$$ Authorize $$屬性)

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

表單身份驗證如何工作?我對如何保持“授權”特別感興趣?(即餅乾??)

餅乾,是的。您還可以查看 MSDN 上的以下文章,該文章解釋了表單身份驗證的工作原理。

引用自:https://stackoverflow.com/questions/12126142