GWT:当发生重定向(例如:OAuth2)时,如何防止清除客户端状态?

GWT:当发生重定向(例如:OAuth2)时,如何防止清除客户端状态?,gwt,oauth-2.0,client-side,state,gwt2,Gwt,Oauth 2.0,Client Side,State,Gwt2,我正在为我的一个GWT项目(我们称之为GWT应用程序)实现OAuth2身份验证。负责身份验证的应用程序是一个基于Spring Framework-3.1.2.RELEASE的第三方应用程序,它使用Spring Security-3.1.3.RELEASE中包含的OAuth2实现(我们称之为OAuth应用程序) GWT应用程序是一种管理应用程序,用于管理用户和商店。每个用户都有一个或多个manager帐户。经理帐户可能有一个或多个附加商店,以便他可以从GWT应用程序的一个屏幕上管理这些商店 这意味

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

GWT应用程序是一种管理应用程序,用于管理用户和商店。每个用户都有一个或多个manager帐户。经理帐户可能有一个或多个附加商店,以便他可以从GWT应用程序的一个屏幕上管理这些商店

这意味着用户可能必须通过不同的经理帐户多次验证,才能在应用程序上按经理帐户显示门店

因此,在我的GWT应用程序的StoreManagement.java页面上,我有以下内容:

private final Map<String, ManagerAndStoresProxy> managerAndStores = Maps.newTreeMap(Ordering.natural());
private final Map manager和stores=Maps.newTreeMap(Ordering.natural());
身份验证后,此映射应填充经理姓名和每个经理的附加存储列表

OAUTH2流量

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

问题

唯一的问题是,由于GWT应用程序正在将用户重定向到另一个应用程序进行身份验证,第一次身份验证有效且映射正确填充时,如果我必须验证另一个帐户,则先前验证的帐户将被清除,并且由于重定向而无法检索

接下来的问题是:当第二次(第三次、第四次等)身份验证流结束时(即在OAuth应用程序的url重定向之后),我如何继续保持该映射并将其检索回来

到目前为止我所尝试的

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

问题


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

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

如果您的应用程序在兼容性方面不受旧浏览器的限制兼容性然后您可以尝试将所有必要的内容存储在中。

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

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

>但这是一个问题,因为我们确实有旧浏览器,不幸的是:)…如果可能的话,我们希望以更gwt的方式解决这个问题。我看不到
ManagerAndStoresProxy
背后的所有复杂性,但是,也许您可以使用coockies?Maksym>将其序列化并存储。该结构非常复杂,因此序列化时可能会影响cookie的大小,但如果数据在结构上稍微简单一点,这将是一种选择。Thomas(以下)指出,我使用的授权流是问题所在,在阅读IETF-OAuth2草案后,他是对的,因此我可能会尝试一下,看看它是否可行。>但这是一个问题,因为我们确实有旧浏览器,不幸的是:)…我们希望以更gwt的方式解决这个问题,当然,如果可能的话。我看不到
ManagerAndStoresProxy
背后的所有复杂性,但是,也许您可以使用coockies?Maksym>将其序列化并存储。该结构非常复杂,因此序列化时可能会影响cookie的大小,但如果数据在结构上稍微简单一点,这将是一种选择。Thomas(以下)指出,我使用的授权流是问题所在,在阅读了IETF-OAuth2草案之后,他是对的,所以也许我会尝试一下,看看它是否可行。你是对的:我检查了IETF-OAuth2草案,发现隐式授权对于在浏览器中实现的客户端来说是一个很好的选择。C.f或Google更容易理解的概述:你是对的:我检查了IETF-OAuth2草案,发现隐式授权对于在浏览器中实现的客户端来说是一个很好的选择。C.f或Google更容易理解的概述:你能告诉我你使用什么库进行客户端oauth2身份验证吗?你能告诉我你使用什么库进行客户端oauth2身份验证吗?