我已在GWT应用中实施了OAuth2身份验证机制。 OAuth2服务器基于Spring framework 3.x(使用其Spring安全OAuth2实现)。
我正在使用OAuth2 “授权代码流”来对用户进行身份验证(尽管在我们的案例中,隐式流可能是更好的选择)。因此,首先,用户被重定向到OAuth2服务器身份验证页面,他输入了他的凭据,如果他成功通过身份验证,则会将其重定向回带有oauth代码的URL。然后,他将再次拨打电话,从OAuth2服务器获取访问令牌。
现在,问题是,我们希望用户能够在应用程序中为页面添加书签,并直接访问它。如果他已经通过身份验证,那么他可以直接访问它(不再涉及身份验证)。否则,他将不得不进入OAuth2身份验证流程,但最后应该重定向回他打算在开始时访问的书签页面。
如何存储此页网址并在用户成功通过身份验证后重定向到该网页?
任何帮助将不胜感激。谢谢!
EDITED
初始网址重定向是通过javascript的 document.location.href
完成的答案 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-pushstate
或custom 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执行此操作。