gwt - 作为 SAML token 身份验证的一部分,URL 片段丢失;解决方法/标准模式?

标签 gwt saml-2.0 ws-federation gwt-places uri-fragment

多个 Web 应用程序身份验证协议(protocol)(例如 WS-Federation 和 SAML 协议(protocol),即所谓的“被动”协议(protocol),显然还有 ASP.NET Forms 身份验证,请参阅 this StackOverflow question 和 AppEngine,请参阅 this GWT bug comment )丢失原始的“URL 片段”,即 # 符号之后的部分。

发生的情况大致如下:在干净的浏览器中(因此没有缓存的信息/cookies/登录信息)我打开 URL (1) http://example.com/myapp/somepage?some=parameter#somewhere 。这使得浏览器请求 (2) http://example.com/myapp/somepage?some=parameter ,服务器将我重定向到我的身份提供者(包括身份验证请求中的 URL (2)),最终我被重定向回我来自的位置,即 URL (2):这是服务器知道的唯一 URL关于。但我想转到 URL (1),而 URL 片段(“ anchor ”)在途中已经丢失,实际上已经在第一步中丢失了。

这似乎是这些协议(protocol)的基本限制,因为服务器根本看不到 URL 片段。

我知道,根据浏览器向服务器请求 (2) 的规范,当我导航到 (1) 时,会导致 SAML 协议(protocol)、WS-Federation 等出现片段丢失限制。我的问题是:如何解决此限制?

明显的解决方法是避免 URL 片段,如 this answer 中建议的那样。 。但是,对于我们的特定 Web 应用程序来说,这并不好,因为我们在单页 GWT 应用程序中使用可添加书签的 URL 片段,以确保应用程序中的导航不会导致页面重新加载。

我的问题:对于这种情况还有哪些其他解决方法或标准模式?

(我对 GWT + SAML 协议(protocol)解决方案特别感兴趣。)

最佳答案

你基本上有两个选择:

  • 避免使用 location.hash(使用 HTML5 的 pushState 代替,至少在支持它的浏览器上;和/或提出一种生成的方法您的应用内的永久链接 - Google 网上论坛可以做到这一点)

  • 使用 JavaScript 进行重定向。 IE。不要从服务器发送重定向,而是发送一个空的 HTML 页面,其中包含一些脚本,该脚本获取完整 URL(带有哈希)并使用 location.assign() 进行重定向> 或location.replace()。如果运气好的话(取决于服务器),您将在身份验证后被重定向到该完整 URL。

您当然可以同时执行这两种操作:如果链接是应用程序的深层链接,则进行重定向(即假设没有哈希),否则发送带有 JS 的页面以确保您不会丢失哈希中存在的任何状态

最后是明显的第三种解决方案,远非理想:不做任何事情,并尝试教育用户,当他们需要(重新)身份验证时,他们应该重新粘贴 URL 或重新单击链接或重新- 单击书签。

关于gwt - 作为 SAML token 身份验证的一部分,URL 片段丢失;解决方法/标准模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20522580/

相关文章:

asp.net-mvc - MVC 中的 Ws-Federation 身份验证在 SAML2.0 验证后不保留声明信息

c# - AspNet Core 1.0.0中如何获取IOwinContext

java - GWT ListBox 默认未选中

java - 为什么 Google 说 MVP 推荐用于 GWT?

java - 如何使用 opensaml 验证 (azure) saml xml 响应?

saml-2.0 - Keycloak IdP SAML 2 将 XML 元数据导出到 SP

java - GWT Locale 在地址栏中有效,但在元中无效

GWT 2.6 - RequestFactory Locator 找不到类似的域方法

spring-mvc - Spring 样本: Key is too long for unwrapping: invalidkeyexception

c# - ADFS 身份验证期间的间歇性重定向循环