【问题标题】:Session timeout in iFrame when use SSO with IdentityServer 4将 SSO 与 IdentityServer 4 一起使用时 iFrame 中的会话超时
【发布时间】:2019-05-07 13:55:25
【问题描述】:

我的场景:

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 中丢失其会话并显示错误:“此内容无法在框架中显示”作为下图:

如果我注销并重新登录,我可以正常访问两个应用程序,然后过一段时间,App_2会再次死机,并显示相同的错误。

任何建议发生了什么以及如何解决此问题?

【问题讨论】:

  • 我有类似的问题,但仅限于 IE。是由于 csp 配置造成的。在其他浏览器中工作,所以我建议首先检查不同类型的浏览器是否存在相同的问题。
  • Chrome 也出现过这种情况

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


【解决方案1】:

开箱即用的协议并不真正支持导航到客户端应用 iframe 中的 authorize 端点。

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

如果您不想修改 IDS4 实现,那么我建议您只进行 _top 导航,但这会涉及嵌入在框架中的应用程序以冒泡到需要登录的顶级页面的指令以postMessage() 为例。

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

【讨论】:

    猜你喜欢
    • 2017-12-07
    • 1970-01-01
    • 2013-01-22
    • 2014-02-26
    • 2023-01-31
    • 2010-12-05
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多