在登录后定义表单身份验证路径不正确地重定向到ReturnUrl

时间:2011-01-14 04:25:20

标签: asp.net authentication configuration

我对表格认真有一个非常不稳定的问题我希望有人能说清楚。这是web.config中的内容:

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

对于身份验证:

<authentication mode="Forms">
  <forms loginUrl="~/Admin/LogOn.aspx" name="MyAppAdmin" requireSSL="false" path="/Admin" cookieless="UseCookies"/>
</authentication>

还有一个针对凭据存储库实现ValidateUser的自定义成员资格提供程序。该应用程序有一个带有LoginName控件的母版页。

似乎正在发生的事情是,有时用户成功登录但登录页面仍然存在,而不是将它们重定向到查询字符串中的ReturnUrl。我们知道他们已成功通过身份验证,因为LoginName控件显示了他们的身份,他们可以随时浏览其他安全内容。

不幸的是,我们无法识别导致这种情况的模式。不同的浏览器,不同的服务器,删除cookie,SSL或没有SSL;没有明显的模式。唯一 清除的是,从表单节点中删除“path”属性后,问题无法再现。

此配置有什么明显错误吗?有关可能原因的任何想法?显然,路径属性并不是必需的,但将事情进一步分离是很好的。

1 个答案:

答案 0 :(得分:2)

所以我实际上在点击提交之前找到了这个答案,但为了获得有关SO的信息而将其放入。 Rick Strahl实际上在this post中钉了它;这是一个区分大小写的问题。

基本上,如果您点击“/ admin”,它会将您重定向到“/Admin/LogOn.aspx?ReturnUrl=%2fadmin%2fdefault.aspx”,然后在身份验证后,将Cookie设置为路径“/ Admin”(在web.config),然后你被重定向到“/admin/Default.aspx”。路径比较区分大小写,因此您不会被识别为已通过身份验证,因此您将循环回到表单。

我的结果不稳定的原因是有些人手动输入“Admin”而其他人输入“admin”。我不是接下来那些人这样做的,这一切听起来都不错。

简单的回答;摆脱路径属性。这是太麻烦了,除非你有绝对的信心,案件不会改变。