表单身份validation忽略默认文档
我花了一天半试图解决这个问题。 基本上有一个ASP.net网站与IIS7使用框架4.0的窗体身份validation。
授权的东西似乎是完美的工作,除了没有指定文档(应解决为默认文档)击中它的每个情况。
例如(请不要苛刻的网站,它仍然是开发;)), http://www.rewardroster.com/Default.aspx完美的作品,这个网页应该允许匿名访问web.config中指定的。
但是如果我点击www.rewardroster.com直接redirect到login页面,并且返回URL设置为“/”或Login.aspx?ReturnUrl =%2f
有些事情我已经尝试过了:
1)将身份validation设置为无,然后默认文档工作,这不是问题。
2)将DefaultDocument属性添加到Web.config
3)删除Default.aspx以外的默认文档列表中的所有条目
4)在Config中添加了MachineKey项
5)在IIS中从集成切换到经典pipe道
这是什么在我的configuration:
<authentication mode="Forms"> <forms name="appNameAuth" loginUrl="Login.aspx" protection="All" timeout="60" slidingExpiration="true" defaultUrl="Default.aspx" path="/"> </forms> </authentication> </authentication> <location path="Default.aspx">
非常感谢你的时间,并希望有人知道这里发生了什么。
这是我的解决scheme:
在Global.asax
,方法: Application_BeginRequest
,放置以下内容:
if (Request.AppRelativeCurrentExecutionFilePath == "~/") HttpContext.Current.RewritePath("HomePage.aspx");
不错,简单,如果你的网站使用基于configurationvariables的多个主页,你有机会围绕你要使用的主页build立逻辑。
Dmitry.Alk
我试图打到根path时看到同样的问题,我尝试了前面提到的一切。 看来Asp.net 4.0在applicationhost.config中为IIS 7添加了两个ExtensionlessUrl模块。您可以通过将以下内容添加到您的web.config中来删除这些模块
<system.webServer> <handlers> <remove name="ExtensionlessUrl-Integrated-4.0"/> <remove name=" ExtensionlessUrl-ISAPI-4.0_32bit "/> </handlers> </system.webServer>
附加信息
Microsoft KB
asp net v4如何处理不扩展的url
我有一个类似的问题。 我没有login时没有样式,www.site.nl \redirect到login页面(带有redirecturl到主页)并进入www.site.nl \ Home(与上述redirecturl相同的主页之前)不需要login。
解决scheme是:
- 打开IIS
- 打开IIS:身份validation
- 打开并编辑匿名访问
- 检查用户(我将用户更改为app.pool用户)
- 授予站点根目录(在文件系统上)的用户权限
这对我来说已经解决了。
祝你好运
我最终做了什么来解决这个问题是在我的login页面写几行代码来检查“/”的Request.QueryString [“ReturnUrl”]。 如果发现,那么它redirect到default.aspx。
我找不到任何方法使表单身份validation不拦截没有指定页面的呼叫(如www.mysite.com)。 :(我什至尝试.NET 4 URL路由,并没有阻止表单身份validation劫持请求。
以下是我在login.aspx中使用的代码:
protected void Page_Load(object sender, EventArgs e) { if (!(IsPostBack || IsAsync)) { string returnUrl = Request.QueryString["ReturnUrl"]; if (returnUrl != null) if (returnUrl == "/") Response.Redirect("default.aspx"); } }
约翰的解决scheme为我工作,但只有当请求是为网站的根。
我的网站是这样组织的:
- 万维网。[mysite的]的.com / login.aspx的
- 万维网。[mysite的]的.com / Default.aspx的
- 万维网。[mysite的]的.com / [somestuff] /default.aspx
- 万维网。[mysite的]的.com / [morestuff] /default.aspx
在遵循Johan的好build议之后,请求将www。[mysite] .com导向到表单login页面,并在login后默认页面。 但是,如果有人要求“/ [somestuff] /”,它仍然是行不通的。
我通过在[somestuff]和[morestuff]目录上启用匿名身份validation,然后在这些目录中的单个文件上禁用它,从而使其工作。 这不是我想要支持的安全设置,因为人们可以从default.aspx获取它们的位置,或者只需要[somestuff] /default.aspx就可以开始。 但现在我知道为什么它失败了。 看来你需要匿名访问你想使用默认文档的目录。
我今天有类似的问题。 我正在尝试使用集成pipe道来保护nonasp.net资源(静态文件,php等)。
我在我的根web.config有一个规则,然后我允许访问特定的资源,在个案的基础上。
这个工作除了对“/”的请求永远不会被authentication(无休止的redirect到login页面),而对“/Default.aspx”的请求是好的。
我的问题是因为所有资源types都启用了Asp.Net UrlAuthentication模块,显然这不适用于我的场景。 相反,我不得不改变这个模块,只为受pipe理的资源工作,并安装IIS7的非托pipeurlvalidation。 然后,我必须configuration(因为它使用不同的身份validation设置),并确保RoleManager已启用非托pipe资源(因为我是对angular色进行身份validation)。 此url可能会有帮助: http : //learn.iis.net/page.aspx/142/understanding-iis-70-url-authorization/
我遇到了同样的问题,并通过这种方式解决:
在Dmitry.Alk解决scheme旁边的Global.asax中添加:
if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/default.aspx") HttpContext.Current.RewritePath("Default.aspx"); if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/") HttpContext.Current.RewritePath("Default.aspx"); if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~") HttpContext.Current.RewritePath("Default.aspx");