在GWT中:如何为页面添加书签并在身份验证后能够重定向到该页面?

时间:2013-09-03 09:24:57

标签: spring gwt authentication redirect oauth

我已在GWT应用中实施了OAuth2身份验证机制。 OAuth2服务器基于Spring framework 3.x(使用其Spring安全OAuth2实现)。

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

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

如何存储此页网址并在用户成功通过身份验证后重定向到该网页?

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

EDITED

初始网址重定向是通过javascript的 document.location.href

完成的

2 个答案:

答案 0 :(得分:1)

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

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


原始回答:

问题是使用 place 的URL的哈希部分,该部分未发送到服务器,因此无法在重定向到OAuth2服务器身份验证页面时使用。

您有2个(可能是3个)解决方案:

  • 停止使用地方的哈希并切换到HTML5历史记录;可以通过History级别的gwt-pushstatecustom PlaceHistoryHandler.Historian使用Places API。但这会限制您的受众群体:http://caniuse.com/history

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

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

答案 1 :(得分:-2)

您可以使用GWT activities and places执行此操作。