1

我在我的 GWT 应用程序中实现了 OAuth2 身份验证机制。OAuth2 服务器基于 Spring 框架 3.x(使用其 Spring 安全性 OAuth2 实现)。

我正在使用 OAuth2 “授权代码流”来对用户进行身份验证(尽管在我们的例子中隐式流可能是更好的选择)。因此,首先,用户被重定向到 OAuth2 服务器身份验证页面,他输入他的凭据,如果他成功通过身份验证,他将被重定向回带有 oauth 代码的 url。然后,他将进行第二次调用以从 OAuth2 服务器获取访问令牌。

现在,问题是,我们希望用户能够在应用程序中为页面添加书签并直接访问它。如果他已经进行了身份验证,那么他将可以直接访问它(不再涉及身份验证)。否则,他将不得不进入 OAuth2 身份验证流程,但最终应该被重定向回他最初打算访问的带有书签的页面。

用户成功通过身份验证后,如何存储此页面url 并重定向到它?

任何帮助,将不胜感激。谢谢!

已编辑

初始 url 重定向是通过 javascript 的document.location.href完成的

4

2 回答 2

1

在 OAuth 2.0授权授予流程中维护原始 URI的方法是将其传递到参数中,以便重定向端点可以使用它,在它交换访问令牌的授权代码后,用户重定向回该 URI。state

仅供参考,这正是 Google 在其 OAuth 2.0 文档中的示例中所建议的,例如https://developers.google.com/accounts/docs/OAuth2Login


原答案:

问题是使用地址的 URL的哈希部分,它没有发送到服务器,因此不能用于重定向到 OAuth2 服务器身份验证页面。

您有 2 个(也许 3 个)解决方案:

  • 停止使用该地点的哈希值并切换到 HTML5 历史记录;如果您使用 Places API ,gwt-pushstate则可以通过History关卡或自定义。PlaceHistoryHandler.Historian这限制了你的观众:http: //caniuse.com/history

  • 停止使用 HTTP 重定向,而是使用 JavaScript,以便您可以将哈希放入 OAuth2 redirect_uri。因此,不要重定向,而是发送带有适当脚本位的错误页面。

  • 一些浏览器在重定向后将哈希附加到 URL,因此您的 OAuth2 服务器可能能够选择它(在 JavaScript 中)并将其附加到redirect_uri. 这可能取决于用于重定向的 HTTP 状态代码(根据经验,它适用于 301,但您不希望此处使用 301)。需要测试。

于 2013-09-03T10:05:20.087 回答
-2

您可以使用 GWT活动和场所来做到这一点。

于 2013-09-03T09:37:57.437 回答