【发布时间】: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-app 的 StoreManagement.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