5

参照元: Microsoft.AspNet.FriendlyUrls

フォーム認証と FriendlyUrls を使用しています。「Account」という名前のサブディレクトリがあり、その中に「Register.aspx」というファイルが含まれています。ファイル「Register.aspx」にアクセス許可を付与し、web.config を介して他のすべてのファイルのアクセス許可を拒否する必要があります。いろいろ設定してみたのですが、Register.aspxというファイルに権限がありません。

web.config

<system.web>
    <authentication mode="Forms">
      <forms loginUrl="Account/login" name="LOGIN" defaultUrl="Account/Logged" timeout="15" cookieless="UseDeviceProfile" protection="All" slidingExpiration="true" />
    </authentication>
  </system.web>

  <location path="Account">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

  <location path="Account/Register">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
4

2 に答える 2

1

FriendlyURLs と Forms 認証 (ただし OWIN) でも同じ問題がありました。/Account/Login?returnUrl=%2FAccount%2FLogin にリダイレクトしようとした承認済みコンテンツ ページにアクセスしようとしましたが、クエリ文字列が最大長を超えるまで、リダイレクトだけが無限ループに陥りました !!! 私が見つけた唯一の方法は、ログインページ(またはアノンアクセスを許可する他のページ)を独自のフォルダーに配置し、ページ自体ではなくそのフォルダーへのアクセスを許可することでした. /Account/Login があれば、次のように追加します。

  <system.web>    
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>

  <location path="Account">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

/Account パスのルールを追加したようですが、拒否に設定しています。それをローカルで許可するように変更したかどうかはわかりません...

デフォルトの ASP.Net 組み込みライブラリではなく、MS OWIN のフォーム認証ライブラリを使用していますが、標準のフォーム認証ライブラリでも上記が機能することを期待しています。参考までに、私のフォーム認証の認証設定は次のようになります。

    public void ConfigureAuth(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            AuthenticationMode = AuthenticationMode.Active,
            LoginPath = new PathString("/Account/Login"),
            LogoutPath = new PathString("/Account/Logout"),
            ExpireTimeSpan = TimeSpan.FromHours(12),
            SlidingExpiration = true,
            CookieName = "MyCookieName.Session",
            CookieSecure = CookieSecureOption.SameAsRequest,
            // Required for AJAX calls
            CookieHttpOnly = false
        });
    }
于 2016-05-11T00:36:06.557 に答える
0

以下のコードを試して、? の代わりに * を変更してください。

<location path="Account/Register">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>

この非常に良い説明を参照してください: http://weblogs.asp.net/gurusarkar/archive/2008/09/29/setting-authorization-rules-for-a-particular-page-or-folder-in-web-config. aspx

于 2013-09-28T07:07:43.477 に答える