ASP.NET MVC表单身份验证-它如何工作和保持身份验证?

ASP.NET MVC表单身份验证-它如何工作和保持身份验证?,asp.net,asp.net-mvc-3,forms-authentication,security,Asp.net,Asp.net Mvc 3,Forms Authentication,Security,我正在一个使用表单身份验证的网站上工作。我对身份验证系统的工作方式很感兴趣,因为当我最初打开站点中的任何页面时,它会将我重定向到登录,并且所有控制器/操作中都没有任何授权逻辑 通过下面的配置,MVC或ASP.NET是否会自动确定您是否已通过身份验证?(如我所说,控制器中没有“重定向”或确保用户获得授权的代码 如果ASP.NET处理此问题,在什么情况下需要授权 您的操作/控制器?(即[授权]属性) 表单身份验证是如何工作的?我对如何工作特别感兴趣 “授权”被持久化?(即cookies??) 网

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

  • 通过下面的配置,MVC或ASP.NET是否会自动确定您是否已通过身份验证?(如我所说,控制器中没有“重定向”或确保用户获得授权的代码
  • 如果ASP.NET处理此问题,在什么情况下需要授权 您的操作/控制器?(即[授权]属性)
  • 表单身份验证是如何工作的?我对如何工作特别感兴趣 “授权”被持久化?(即cookies??)
网站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>

C
该站点使用MVC区域,我假设这就是本节所指的区域

通过下面的配置,MVC或ASP.NET是否自动 确定您是否已通过身份验证?(如我所说,中没有代码) 将控制器设置为“重定向”或确保用户 授权的

是的,它使用web.config中的
部分仅允许具有管理员角色的用户访问
/Admin/*
路径

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

在ASP.NET MVC中使用
[授权]
属性是控制哪些操作需要授权的首选方法,而不是像您那样在web.config中使用
标记。原因是ASP.NET MVC使用路由,您不应该在web.config中硬编码路径,而这正是
部分所发生的情况。因此始终使用
[授权]
属性来修饰需要验证的控制器/操作

表单身份验证是如何工作的?我对如何工作特别感兴趣 “授权”被持久化?(即cookies??)

Cookies,是的。您还可以在MSDN上签出,该MSDN解释了表单身份验证的工作原理