【问题标题】:after OAuth redirect fragment gets lostOAuth 重定向片段丢失后
【发布时间】:2014-06-18 04:06:04
【问题描述】:

我有一个使用片段访问资源的 Web 环境。 (如 foo.com/#/my_resource)。

我正在尝试将使用 OAuth 2 的身份验证添加到我的服务器。我正在使用带有 pac4j 的 Shiro 框架。我在这里遇到的问题是,在我登录到提供程序后,浏览器会丢失我的哈希,所以我被重定向到 foo.com/ 而不是 foo.com/#/my_resource。

认为这可能是一个常见问题。有什么解决方法吗?这是预期的行为吗?

谢谢!

【问题讨论】:

    标签: api authentication oauth oauth-2.0 shiro


    【解决方案1】:

    如果您向带有片段的 URL 提交请求,则片段不会发送到服务器 - 这是一个仅限客户端的概念。因此服务器将无法重定向到 URL 并包含原始片段。

    此外,您的问题还不是很清楚,但如果您的意思是您将其用作 OAuth 2 请求中的 redirect_uri 参数,则规范 explicitly forbids the use of a fragment in the value

    【讨论】:

    • 我没有在 redirect_uri 参数中发送片段,而是在服务器端处理 OAuth。因此,正如您所说,重定向根本不了解哈希。但据我所知,浏览器会在重定向期间保留哈希值。当我被重定向到 OAuth 提供程序的登录页面时,至少该片段仍然存在于浏览器中。但是登录后,我又被重定向到我的域,但片段丢失了。
    • 重定向告诉浏览器更改到完全不同的位置,由服务器发送。当服务器不知道它是什么时,您为什么希望它保留片段?如果您调试浏览器的请求和响应(例如使用 firebug 或 chrome),那么发生的事情应该很明显。
    • 我认为您使用了错误的 OAuth 工作流程。片段在 JavaScript 客户端的“隐式授权”场景中使用。无论如何,片段完全是一个客户端概念。
    猜你喜欢
    • 2014-03-31
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多