9

フォーム認証を使用するサイトで作業しています。サイト内の任意のページを最初に開くと、ログインにリダイレクトされ、コントローラー/アクションのいずれにも承認ロジックが配置されていないため、認証システムがどのように機能しているかに興味がありました。

  • 以下の構成により、MVC または ASP.NET は、認証されているかどうかを自動的に判断しますか? (私が言ったように、コントローラーには「リダイレクト」したり、ユーザーが承認されていることを確認したりするコードはありません。
  • ASP.NET がこれを処理する場合、どのような状況でアクション/コントローラーを承認する必要がありますか? (つまり、[Authorize] 属性)
  • フォーム認証はどのように機能しますか? 「承認」がどのように保持されるかに特に興味がありますか? (つまり、クッキー??)

Web サイト 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では、web.config でタグ[Authorize]を使用する代わりに、承認が必要なアクションを制御するために属性を使用する方法が推奨されます。この理由は、ASP.NET MVC がルーティングを使用し、セクション<location>で発生する web.config でパスをハードコーディングしてはならないためです。したがって、認証が必要なコントローラー/アクションを装飾<location>するには、常に属性を使用してください。[Authorize]

フォーム認証はどのように機能しますか? 「承認」がどのように保持されるかに特に興味がありますか? (つまり、クッキー??)

クッキー、はい。フォーム認証のしくみについて説明している MSDNの次の記事も参照してください。

于 2012-08-25T22:36:31.907 に答える