9

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

  • 通过下面的配置,MVC 或 ASP.NET 是否会自动确定您是否通过了身份验证?(就像我说的,控制器中没有代码可以“重定向”或确保用户被授权。
  • 如果 ASP.NET 处理这个问题,在什么情况下您需要授权您的操作/控制器?(即 [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 区域,我认为这就是该部分所指的内容。

4

1 回答 1

9

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

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

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

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

表单身份验证如何工作?我对如何保持“授权”特别感兴趣?(即饼干??)

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

于 2012-08-25T22:36:31.907 回答