将SSO与IdentityServer 4一起使用时,iFrame中的会话超时

时间:2019-05-07 13:55:26

标签: c# iframe model-view-controller identityserver4 session-timeout

我的情况:

App_1和App_2是我的MVC Web应用程序。 App_1是MVC 4.5,App_2是MVC.NET Core 2。

我将IdentityServer4用于SSO。

我有一个页面可以登录并使用IdentityServer4进行身份验证

在App_1中,我使用iFrame嵌入了其中的App_2。 App_1和App_2是相同的域,不同的子域

现在,我通过Internet Explorer通过登录页面登录到App_1。登录成功后,UM将我重定向到App_1,我可以照常使用App_1和App_2。我可以在App_1内显示App_2的内容,使用App_2功能...

我还将两个应用的会话超时设置为6小时。

但是,当我在App_1中工作了一段时间(1-2小时)后,App_2将在iFrame中丢失其会话并显示错误:“ 此内容无法显示在框架中”,因为下图:

Error

如果我注销并再次登录,则我可以正常访问两个应用程序,然后过一会儿,App_2将再次失效,并显示相同的错误。

有什么建议吗?如何解决此问题?

1 个答案:

答案 0 :(得分:0)

开箱即用的协议实际上并不支持在客户端应用iframe中导航到authorize端点。

您可以创建一些中间件来重写Content-Security-Policy和/或X-Frame-Options标头,以允许您的客户端起源。

如果您不想修改IDS4实现,那么我建议您只进行_top导航,但这会涉及嵌入在框架中的应用程序,从而使登录的顶级页面气泡起来例如,需要使用postMessage()

我们在设置中遇到了类似的问题,在那个世界中,我们只在框架内执行prompt=none authorize请求。如果返回login_required错误,那么我们会在顶部窗口中向父母发送一条消息,要求prompt=login的请求。这确实需要更改authorize端点的默认CSP,以始终始终允许(非常受信任)主机应用程序来源。