我有一个奇怪的间歇问题与MVC4/IIS/表单认证。
我有一对使用SSO相互传递控制的站点。大多数情况下,切换会正确进行,用户会按预期重定向到下一个站点。但是,在某些情况下,即使发送了有效的SSO信息,也会要求用户再次登录。SSO
方法用[AllowAnonymous]
属性和web进行修饰。Config 还有一个位置条目,授予所有用户访问/account/sso的权限。
它似乎发生在目标站点第一次被访问时-一旦应用程序池被预热,这个问题就消失了。
其他要点:
1两个站点都是。net 4,所以不应该有任何遗留的加密问题。
2. 这个问题很少发生(<10%的时间),所以代码本身应该是sound
3.本地托管是IIS 7.5在win7x64上,和azure -发生在两个地方
4. 似乎与浏览器无关
<location path="account/sso">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
[Authorize]
public class AccountController : BaseControllerTestable
{
public AccountController()
: base()
{
}
[AllowAnonymous]
public ActionResult SSO(string AuthToken, string Target)
{
//SSO logic here
}
}
任何想法?
您的Controller类上有一个Authorize属性,这意味着您的SSO方法将对其应用AllowAnonymous和Authorize。在本例中,Authorize属性似乎需要删除。
什么是你的 basecontrollerertest ?您是否有任何授权属性?基类将首先被实例化,然后再实例化派生类上的其他方法。所以如果你碰巧在基本控制器上有[Authorize],那可能对你来说是个问题。
我想我终于解决了这个问题(我们只有在没有复发的情况下才能确定,因为它是间歇性的)
有几个因素起作用。首先,我注意到一些静态项目(css+js文件大多),被困在身份验证循环,即使他们应该是自由访问,所以我在web中添加了一个位置规则。配置以确保允许匿名用户使用。我还添加了一个路由异常来忽略favicon.ico请求。这似乎可以防止代码在第一次身份验证时被自己绊倒。最后,问题是间歇性的原因是由于另一个错误,如果有任何其他会话打开(db驱动)的问题没有发生。这就解释了为什么这个bug只发生在清晨,即前一天的所有会话都过期了。