几种web应用程序身份验证协议(如WS-Federation和SAML协议,即所谓的“被动”协议,以及显然也是ASP.NET Forms身份验证,见这个StackOverflow问题和AppEngine,见这个GWT bug注释)丢失了原始的'URL片段‘,即#-符号后面的部分。
所发生的情况大致如下:在干净的浏览器中(所以没有缓存的信息/cookie/登录信息),我打开了http://example.com/myapp/somepage?some=parameter#somewhere (1)。这使得浏览器请求(2) http://example.com/myapp/somepage?some=parameter,服务器将我重定向到我的身份提供者(包括身份验证请求中的URL (2) ),并最终将我重定向回我来自的地方,即URL (2):这是服务器唯一知道的URL。但是我想转到URL (1),URL片段(‘锚’)已经丢失了,实际上已经在第一步了。
这似乎是这些协议的一个基本限制,因为服务器根本看不到URL片段。
我知道浏览器根据规范从服务器请求(2),当我导航到(1)时,导致SAML协议、WS-Federation等方面的片段丢失限制。我的问题是:如何解决这个限制?
显而易见的解决办法是避免使用这个答案中的URL片段。但是,对于特定的web应用程序来说,这并不好,因为我们在单页GWT应用程序中使用了可书签的URL片段,以确保应用程序中的导航不会导致页面重新加载。
我的问题是:对于这种情况,还有其他的解决办法或标准模式吗?
(我对GWT + SAML协议解决方案特别感兴趣。)
https://stackoverflow.com/questions/20522580
复制相似问题