当应用程序在不同的计算机上时,IdentityServer3无法更新cookie?

时间:2016-09-01 17:35:10

标签: single-sign-on identityserver3

我使用IdentityServer3为SSO设置了几个测试站点,几乎是那些具有轻微virations的cookie切割器示例应用程序。除了一件事之外,它们运行良好:当尝试通过cookie单点登录和/或更新声明时,它仅在所有应用程序位于同一台计算机上时才有效。

例如,这两个应用可以单点注销。

http://localhost:81
http://localhost:82

使用以下内容在一个应用中更新的声明也显示在另一个应用中。

        var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
        authenticationManager.AuthenticationResponseGrant = 
            new AuthenticationResponseGrant(new ClaimsPrincipal(identity), 
                 new AuthenticationProperties { IsPersistent = false });

如果我配置这样的应用程序也可以:

http://mymachine/app1
http://mymachine/app2

但如果我混合两个

http://localhost:81
http://mymachine/app2

然后它将无法正常工作。尝试过SignOut / SignIn,结果相同。他们仍然单点登录,但不能一起签出。索赔的变更不会在另一方中显示。当然,如果我将应用程序部署到不同的服务器,也是如此。好像cookie更新发生在本地机器上,而不是发生在IdSvr上。

任何提示我错过了什么?感谢。

1 个答案:

答案 0 :(得分:2)

单一注销无法开箱即用,不幸的是,您在同一个域中看到的行为有点像红鲱鱼。

开箱即用,当您注销IdentityServer时,您的客户端应用程序只有在向IdentityServer发出新请求后才能找到并注销自己(可能是他们自己的应用程序cookie已过期并且他们重​​新登录,或者也许他们试图请求令牌。

要实现单点注销,每个客户端应用程序都需要让IdentityServer告知他们需要注销。这可以使用front-channel HTTP requestsession management完成。

查看IdentityServer Signout Support文档,了解有关如何执行此操作的详细信息,或查看有关该主题的Brock Allen's post