2013-02-21 97 views
4

我正在为它构建一个REST服务器和一个客户端。现在我需要嵌入一些第三方oauth2认证。现在我将用户引导到服务器,让他对服务进行身份验证,然后重定向到客户端,有点像这样:REST服务与第三方OAuth2

客户端:未验证 - >服务器 - >重定向到第三方 - >重定向到服务器 - >重定向到应用程序。

然后我在客户端上存储一个cookie来识别用户(cookie使用withCredentials和CORS发送)。

我现在的问题是如何在令牌过期时重新进行身份验证?由于客户端和服务器仅通过json进行通信,因此我必须再次启动完整的身份验证过程,因此用户将失去应用程序中的所有状态。有没有人有如何解决这个问题的建议?在客户端执行身份验证并将访问令牌存储在服务器或其他内容上更好吗?

回答

1

无论您做了什么是获得OAuth的正确方法access_token。而你的access_token是暂时的,所以可以过期。

我认为你可以做以下任一:

  1. 检查授权服务器(你使用获得令牌)提供选择使用的access_token得到一个持续时间较长的令牌。这也在OAuth 2规范中提出。

  2. 尝试存储用户的状态而不使用会话。

+0

对,所以我想没有更好的解决方案。获得较长的令牌并不能真正消除该问题,但会使重新验证过程不那么频繁。存储状态当然是可能的(因为一切都已经是客户端),但也是一个难题。我正在考虑使用window.open()作为重新认证流程,但它也不是最优的。如何使用iframe? – cpojer 2013-02-21 12:38:57

+0

存储状态不那么难;您可以将用户的状态信息存储在您的应用中。我还没有尝试使用iframe,但值得尝试。 – 2013-02-21 12:57:19

+0

这取决于我们在谈论什么样的状态。我的意思是应用程序的当前状态,直到用户最后一次点击。如果应用程序足够复杂,那绝对不是一个小问题。 – cpojer 2013-02-21 13:21:10