MVC4 / IIS / Forms认证单点登录问题



我有一个奇怪的间歇问题与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只发生在清晨,即前一天的所有会话都过期了。

最新更新