2013-09-28 106 views
5

参考:Microsoft.AspNet.FriendlyUrlsAsp.net 4.0 Forms身份验证和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> 

回答

1

我曾与FriendlyURLs和Forms身份验证(OWIN虽然)同样的问题。尝试访问授权内容页面试图重定向到/帐户/登录?returnUrl =%2FAccount%2FLogin,只有重定向卡在一个无限循环,直到查询字符串超过最大长度!我唯一能找到的方法是将登录页面(或允许匿名访问的任何其他页面)放在它自己的文件夹中,并授予对该文件夹的访问权限,而不是页面本身。所以,如果我有/帐号/登录,我想补充:

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

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

我看到您已经添加了/帐户路径的规则,但将其设置为拒绝。不知道你是否已经改变了允许在本地或不...

尽管我使用MS OWIN的窗体认证库,而不是默认的ASP.Net内置的一个,我预计上述将适用于标准一个也是如此。仅供参考,我的表单验证身份验证设置看起来像这样:

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 
     }); 
    }