2013-02-21 93 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