【问题标题】:GWT : How to prevent client-side state from being cleared when a redirection (for e.g : OAuth2) happens?GWT:当重定向(例如:OAuth2)发生时,如何防止客户端状态被清除?
【发布时间】:2013-08-27 08:48:48
【问题描述】:

我正在为我的一个 GWT 项目(我们称之为 GWT-app)实施 OAuth2 身份验证。负责认证的应用是基于Spring Framework-3.1.2.RELEASE的第三方应用,使用Spring Security-3.1.3.RELEASE中包含的OAuth2实现(我们称之为 OAuth-app)。

GWT-app 是一个用于管理用户和商店的管理应用程序。每个用户都有一个或多个经理帐户经理帐户可能有一个或多个商店附加到它,以便他可以从GWT-app的一个屏幕上完全管理它们。

这意味着用户可能需要通过不同的经理帐户进行多次身份验证才能在应用上按经理帐户显示商店。

所以在我的 GWT-appStoreManagement.java 页面上,我有以下内容:

private final Map<String, ManagerAndStoresProxy> managerAndStores = Maps.newTreeMap(Ordering.natural());

身份验证后,此地图应填充经理名称和每个附加商店的列表。

OAUTH2 流程

授权码流用于身份验证。当 GWT-app 想要对某人进行身份验证时,它会将用户重定向到 OAuth-app 上的登录页面。用户输入他的凭据,然后将看到一个授权页面,询问他是否要允许 GWT-app 访问他的信息。如果用户点击授权,他将被重定向回带有访问令牌的 GWT 应用程序。

问题

唯一的问题是,由于 GWT-app 正在将用户重定向到另一个应用程序进行身份验证,第一次身份验证工作并且映射正确填充但如果我必须验证另一个帐户然后由于重定向,之前经过身份验证的帐户已清除且无法检索

那么问题是:当第二个(第三个、第四个等)身份验证流程结束时(即在OAuth 应用程序)。

到目前为止我做了什么

到目前为止我所做的是,当用户想要从 StoreManagement.java 页面继续进行身份验证时,他会看到一个 popup 重定向到 OAuth-app 认证页面。然后从此弹出窗口中检索 访问令牌,但我必须将其发送回父窗口(即 StoreManagement.java 页面)。这可以通过 HTTP GET 参数完成,但此方法重新加载 父页面,结果是相同的:之前经过身份验证的帐户被清除。

问题

在不清除先前上下文且不需要任何服务器端会话机制的情况下,处理这种情况的最佳方法是什么?

【问题讨论】:

  • 您能告诉我您使用什么库进行客户端 oauth2 身份验证吗?

标签: gwt oauth-2.0 client-side state gwt2


【解决方案1】:

问题的根源是使用授权码授权;隐式授权(又名客户端流程)会更合适。

【讨论】:

【解决方案2】:

如果您的应用在兼容性方面不受旧浏览器的限制,那么您可以尝试将所有必要的内容存储在 HTML5 Web Storage 中。

【讨论】:

  • > 但这是一个问题,因为我们确实有旧浏览器 :) ...如果可能的话,我们当然希望以更 gwt 的方式解决这个问题。
  • 我看不出ManagerAndStoresProxy背后的所有复杂性,但也许你可以序列化它并使用coockies存储?
  • Maksym > 结构非常复杂,因此在序列化时它可能会影响 cookie 的大小,但是如果数据在结构方面稍微简单一点,那将是一个选择。 Thomas(下)指出我正在使用的授权流程是问题所在,在阅读了 IETF-OAuth2 草案here 之后,他是对的,所以也许我会尝试一下,看看它是否可行。
猜你喜欢
  • 1970-01-01
  • 2010-12-03
  • 2015-12-21
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
相关资源
最近更新 更多