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

2024-03-23

几种 Web 应用程序身份验证协议(例如 WS-Federation 和 SAML 协议,即所谓的“被动”协议,显然还有 ASP.NET Forms 身份验证,请参阅这个 StackOverflow 问题 https://stackoverflow.com/q/7270066/223837和 AppEngine,请参阅这个 GWT bug 评论 https://code.google.com/p/google-web-toolkit/issues/detail?id=7101#c14) 丢失原始的“URL 片段”,即 # 符号之后的部分。

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

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

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

明显的解决方法是避免 URL 片段,如中所建议的这个答案 https://stackoverflow.com/a/7270108/223837。然而,对于我们的特定 Web 应用程序来说,这并不好,因为我们在单页 GWT 应用程序中使用可添加书签的 URL 片段,以确保应用程序中的导航不会导致页面重新加载。

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

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


你基本上有两个选择:

  • 避免使用location.hash(使用 HTML5pushState相反,至少在支持它的浏览器上;和/或提出一种生成方法永久链接在您的应用程序中 - Google 网上论坛就是这样做的)

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

作为 SAML 令牌身份验证的一部分,URL 片段丢失;解决方法/标准模式? 的相关文章

  • GSON反序列化:如何知道对象?

    我尝试使用 gson 库来反序列化发送给我的对象流 在我见过的所有示例中 当调用 fromJson 方法时 我们已经知道我们期望拥有什么类型的对象 就我而言 我收到不同对象的流 我想知道在反序列化对象之前了解对象类的最佳方法 A B B1
  • 带下拉箭头的 GWT 文本框

    我想在文本框中有一个下拉箭头 在我的例子中实际上是 SuggestBox GMail 执行此操作是为了实现高级搜索功能 打开高级搜索对话框 要使该箭头显示在 TextBox 的右侧并可单击 正确的 GWT 布局是什么 看看 GMail 我发
  • 将用户从 SP 中注销,但不从 IDP 中注销

    是否可以将用户从使用 SAML 身份验证的应用程序中注销 但让他们保持登录 IDP 的状态 以便他们可以继续访问其他服务提供商 我希望能够将用户从应用程序中注销 并让他们在返回应用程序时进行身份验证 而无需将其从 IDP 中注销 即我不想使
  • GWT:在另一个模块内调用RPC服务

    我有一个模块B 它继承了模块A 当我从A内部调用RPC服务时 它们工作正常 但是当我在B中调用A的服务时 RPC调用总是失败 我错过了什么吗 预先感谢您的任何帮助 我在这里找到了我的问题的答案 http blog cloudglow com
  • Servlet 过滤器在 AWS 上返回“代理错误”

    我已经设置了一个Filter为我的 GWT Web 应用程序添加爬网程序支持 这个想法是捕获所有包含 escaped fragment 并为爬虫提供快照 我已经设置了Filter使用 Guice 如下 filter through Craw
  • GWT 和 Google 文档 API

    我正在使用 GWT 创建一个简单的应用程序 让教师可以轻松创建自己的课程 该应用程序将位于 Google App Engine 上 但我想将课程存储在用户的 Google 文档空间中 是否可以 据我所知 gwt 将 java 转换为 jav
  • 如何在 GWT 中取消转义字符串

    我使用了 SafeHtmlUtils htmlEscape text 并且我想使用相反的功能 你能告诉我 gwt 中是否有像 unescapeHtml 这样的函数 如果 并且仅当 您可以相信文本不包含恶意内容 您可以使用 import co
  • SMARTGWT 数据源 (GWT-RPC-DATASource) LISTGRID

    我在使用 smartGWT 绑定 ListGrid 中的数据源时遇到问题 我有 GWT RPC DataSource 并将其设置为我的数据源 grid setDataSource ds 单击一键 我的数据源发生了一些更改 我正在生成新的数据
  • 测试 GWT 代码的最佳方法是什么[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • GWT SafeHTML、XSS 和最佳实践

    OWASP 的优秀人员强调 您必须对 HTML 文档中要放入不受信任数据的部分 正文 属性 JavaScript CSS 或 URL 使用转义语法 看OWASP XSS https www owasp org index php XSS 2
  • 如何使您的 GWT 应用程序可插入?

    我正在 与我的团队 编写一个 GWT 应用程序 它解析并表示一些特定于领域的语言 例如 使用文本 视频和 UI 控件播放媒体演示 所以应用程序有一组组件 一个 用于保存模型 一个 用于控制例程 控制器 当然我们还有视图类 现在我们遇到了一个
  • 根据外形尺寸更改入口点类别

    如果用户从移动 Web 浏览器或桌面 Web 浏览器访问 我希望在我的 GWT 应用程序中加载不同的用户界面 我想知道如何编辑我的 Application gwt xml 文件 更改根据外形规格加载哪个入口点类 我认为这可能是这样的 但我只
  • Jackson:无法反序列化 START_OBJECT 令牌中的 Number 实例

    我的 GWT 服务返回LinkedList
  • 配置 Ping Federate 和 Spring SAML 对应用程序进行身份验证

    我在运行 Windows Server 2008 R2 SP1 English 64Bit Base 2014 04 09 的 AWS EC2 上安装了 PingFederate 我有一个使用 Spring Security 进行身份验证的
  • GWT 主题/模板 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 GWT 开发一个应用程序 尽管 GWT 是基于 JAVA 的媒介 但外观和感觉只能通过 CS
  • 使用 GWT CellTableBuilder 构建树表

    Is it possible to build a tree table like this http www sencha com examples ExamplePlace basictreegrid with the new Cell
  • GWT 身份验证和用户信息访问

    只是想知道我的以下身份验证方法是否正确 有没有什么陷阱或者遗漏的地方 非常欢迎建议和讨论 1 gt 用户提供用户名和密码 并通过RPC发送到服务器 与数据库中存储的哈希值进行比较 2 gt 假设用户名和密码准确 会话中会保存一个Auth T
  • 阻止 GWT 中的事件冒泡

    我有以下代码片段 changeTextArea 是一个 TextArea 对象 changeTextArea addKeyboardListener new KeyboardListenerAdapter public void onKey
  • 如何创建开发/调试和生产设置

    我最近无意中部署了我们的游戏typrX的调试版本 打字比赛在www typrx com http www typrx com 尝试一下 很有趣 它很快就被纠正了 但我知道它可能会再次发生 挖完后 在 Google 上 我找到了一些如何创建
  • Azure AD B2C 中的自定义 SAML iDP 是否支持 iDP 发起的 SSO?

    我正在努力添加自定义 SAML 2 0 身份提供商 Okta 以与我的 B2C 租户一起使用 我已经配置了它 当我从我的应用程序启动登录时 它工作得很好 但是 当我从身份提供商 Okta 启动登录时 它无法登录 第一次尝试时 我从 B2C

随机推荐

  • Gremlin 删除所有顶点

    我知道如何在 Gremlin 中通过 id 删除顶点 但现在我需要清理数据库 如何删除多个顶点 删除1v是这样的 ver g v 1 g removeVertex ver 我的意思是类似SQL的东西TRUNCATE 如何在不删除类的情况下删
  • 使用 pd.read_html 解析 html 表,其中单元格本身包含完整表

    我需要从 html 解析一个表 该表在较大的表中嵌套有其他表 如下所示pd read html 每个嵌套表都会被解析 然后作为行 插入 连接 我希望将这些嵌套表分别解析为自己的表pd DataFrames并将插入的对象作为相应列的值 如果这
  • 我的视频没有关键帧,怎么可能?

    当我在视频上运行以下行时 它仅输出 P 帧和 B 帧 没有 I 帧 ffprobe select streams v show frames show entries frame pict type of csv 00000 MTS 视频怎
  • EntityConnection 和打开的 SqlConnection

    我有一个关于采用 CodeFirst 方法的 EntityFramework 的问题 基于 EntityConnection 源代码和文档 我无法使用已打开的 SqlConnection 创建它 它要求应该关闭 我们有一些不同的数据库数据层
  • Gradle 项目刷新失败。安卓工作室

    尝试在 Android Studio 上运行我的应用程序时出现此错误 有谁知道原因可能是什么 谢谢 Gradle MyApp refresh failed Error Cannot locate factory for objects of
  • StackOverflowException 加载 XsltCompiledTransform

    加载 XslCompiledTransform 时 我遇到一些大型 xslt 崩溃 iis StackOverflowException 而旧的 已弃用的 XslTransform 工作正常 大模板是否存在一些已知问题 奇怪的是 相同的 X
  • 获取 Woocommerce 自定义电子邮件内容的自定义电子邮件占位符值

    我在 WooCommerce 中创建了自己的电子邮件课程 因为我的电子邮件内容中需要一个自定义参数 所以我已将带有此自定义参数的占位符添加到 wc 电子邮件触发函数中 public function trigger order id fir
  • 如何使用 Jersey for java 在浏览器中呈现新的 .jsp 文件?

    我的网站进入一个登录页面 当用户登录时我想重定向到另一个页面 我有一个 POST 方法 将 用户名 和 密码 发送到服务器 服务器检查用户名和密码是否正确存在 这是我的方法 POST Path logIn public void signI
  • 如何使用 jQuery 防止页面卸载?

    在我的程序中 如果用户尝试离开页面 他将收到一个对话框 询问他是否确定要离开 如果用户选择不离开页面 我应该如何实现 取消 选项 源 JavaScript 代码 window unload function var c confirm Ar
  • 如何处理“伪终端不会被分配,因为 stdin 不是终端”。

    ssh t remotehost vim tmp x txt 我知道我可以运行上面这样的命令 但我希望能够在远程计算机上运行任何本地 bash 代码 因此 我想调用远程 bash s 以便可以处理任何本地 bash 代码 ssh t rem
  • 有没有办法强制对 .NET 标准项目的项目引用到特定的 TargetFramework

    我是 GitHub 项目的贡献者 最近我们的项目遇到了一些问题 NET Standard 2 0 项目正确安装到 NET Framework 4 5 项目中 https github com wojtpl2 ExtendedXmlSeria
  • 在 python 中创建字符串数组的最佳方法是什么?

    我对 Python 及其库比较陌生 我想知道如何创建具有预设大小的字符串数组 这在java中很容易 但我想知道如何在python中做到这一点 到目前为止我能想到的就是 strs size 当我尝试对其调用字符串方法时 调试器会给出错误 X
  • lightbox-0.5 jquery 兼容性问题

    我正在尝试从这里集成 jquery lightbox 插件 http leandrovieira com projects jquery lightbox http leandrovieira com projects jquery lig
  • UWP 应用程序不会进入暂停状态

    在我的 UWP 应用程序中 我使用应用程序服务作为进程中后台任务来与 win32 应用程序通信以获取信息 我的应用程序甚至不会进入挂起状态 它始终保持在运行状态 但是当我终止我的 win32 应用程序时 它将处于挂起状态 要使应用程序暂停状
  • CSS硬件加速宽度?

    我正在尝试构建一个 Phonegap 应用程序 该应用程序将允许用户通过移动中间分隔线来更改两列布局的大小 我能够让它工作 但存在一个巨大的用户体验问题 它很滞后 这并不可怕 但在最新的 iPad 上 它甚至很明显 这让我很担心 这是我的
  • 装配冒泡排序交换

    我正在尝试在 x86 程序集中进行冒泡排序 是的 它必须是冒泡排序 因为我不关心不同类型排序的速度优化 并且出于某种原因 我的代码不会交换必要的值 这是我的代码 mov eax list store list in eax mov edx
  • 如何使用 php 的一些参数运行 perl 脚本

    我的html网页调用php脚本将文件从本地计算机上传到服务器 如下所示
  • 有什么方法可以从 Three.js Object3D 中获取边界框吗?

    我正在使用 Three js 和 OBJLoader js 加载 OBJ 文件 这将返回一个 Three Object3D 对象 它具有您期望从 3D 模型中获得的内容 位置向量 向上向量 我不明白的是如何获得它的边界框 这可能吗 您不需要
  • 如何从 bash 运行 xcode 项目?

    我有一个名为 xcodebuild 的构建脚本 这可行 但我也想从 bash 运行该项目 实际上 我想不需要从 GUI 中单击 构建并运行 按钮 我正在查看 xcrun 但它对我来说不太明显该做什么 我在 shell 脚本中为我的一个项目执
  • 作为 SAML 令牌身份验证的一部分,URL 片段丢失;解决方法/标准模式?

    几种 Web 应用程序身份验证协议 例如 WS Federation 和 SAML 协议 即所谓的 被动 协议 显然还有 ASP NET Forms 身份验证 请参阅这个 StackOverflow 问题 https stackoverfl