我对表格认真有一个非常不稳定的问题我希望有人能说清楚。这是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”属性后,问题无法再现。
此配置有什么明显错误吗?有关可能原因的任何想法?显然,路径属性并不是必需的,但将事情进一步分离是很好的。
答案 0 :(得分:2)
所以我实际上在点击提交之前找到了这个答案,但为了获得有关SO的信息而将其放入。 Rick Strahl实际上在this post中钉了它;这是一个区分大小写的问题。
基本上,如果您点击“/ admin”,它会将您重定向到“/Admin/LogOn.aspx?ReturnUrl=%2fadmin%2fdefault.aspx”,然后在身份验证后,将Cookie设置为路径“/ Admin”(在web.config),然后你被重定向到“/admin/Default.aspx”。路径比较区分大小写,因此您不会被识别为已通过身份验证,因此您将循环回到表单。
我的结果不稳定的原因是有些人手动输入“Admin”而其他人输入“admin”。我不是接下来那些人这样做的,这一切听起来都不错。
简单的回答;摆脱路径属性。这是太麻烦了,除非你有绝对的信心,案件不会改变。