ASP.NET MVC Forms身份验证 - 它如何工作并保持身份验证?

con*_*att 9 asp.net security forms-authentication asp.net-mvc-3

我正在使用表单身份验证的网站上工作.我对身份验证系统的运行方式感兴趣,因为当我最初在网站中打开任何页面时,它会将我重定向到登录,并且没有任何控制器/操作在其中放置任何授权逻辑.

  • 通过下面的配置,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>
Run Code Online (Sandbox Code Playgroud)

该站点使用MVC区域,我认为这是该部分所指的.

Dar*_*rov 9

通过下面的配置,MVC或ASP.NET是否自动确定您是否经过身份验证?(就像我说的,控制器中没有代码可以"重定向"或确保用户已获得授权.

是的,它使用<location>web.config中的部分仅允许具有Admin角色的用户访问该/Admin/*路径.

如果ASP.NET处理此问题,您需要在什么情况下授权您的操作/控制器?(即[授权]属性)

在ASP.NET MVC中,使用该[Authorize]属性是控制哪些操作需要授权而不是<location>像在web.config中那样使用标记的首选方法.这样做的原因是ASP.NET MVC使用路由,你不应该在你的web.config中硬编码路径,这是该<location>部分发生的事情.因此,始终使用该[Authorize]属性来装饰需要身份验证的控制器/操作.

表单身份验证如何工作?我对"授权"如何持久感兴趣?(即饼干??)

饼干,是的.您还可以查看MSDN上的以下文章,其中解释了表单身份验证的工作原理.