2016-06-29 52 views
3

我有一個Web應用程序,將處理與OAuth2的身份驗證。認證後,Web應用程序具有令牌並可以訪問資源。但是,如果用戶刷新頁面或關閉瀏覽器並稍後回來,令牌將丟失,用戶必須重新登錄。用戶體驗方面非常糟糕。如何在頁面刷新時發送OAuth2訪問令牌?

此外,服務器端代碼會檢查用戶是否已登錄,並僅在用戶登錄時才發送應用程序的主頁。如果不是,則會重定向到登錄頁面。

由於OAuth2令牌作爲標題發送到服務器,因此當用戶在地址欄中鍵入站點名稱時,瀏覽器不會發送任何令牌。

我打算在cookie中發送訪問令牌。這是一個合適的解決方案?

回答

1

如果您使用的是React,您可能希望將您的訪問令牌設置爲您在window.ready()或ComponentDidMount()生命週期鉤子上發送到tour API或Server的每個HTTP請求的默認標頭。

然後,這樣做後,您可以開始使用您的首選庫(如axios)獲取數據或在應用程序準備就緒時獲取數據。

爲此,您只需將訪問令牌第一次保存在本地存儲中,然後在window.ready()上檢索它。 您將在您的應用容器組件或index.html文件中的腳本標記中執行此操作。

儘管此解決方案不會使您能夠爲安全路由執行服務器端水合,特別是當您的數據來自獨立API時。 使用這種解決方案解決服務器端水合的唯一方法是將用戶訪問令牌設置爲url中的查詢字符串參數,這樣瀏覽器即使不執行javascript也可以將其傳遞給服務器;但與此相關的安全漏洞明顯存在。

希望這會有所幫助,歡呼聲。

+0

當用戶輸入網站名稱到瀏覽器的地址欄時,怎麼樣?在這種情況下如何發送訪問令牌? – zarax

+0

我們在這裏討論安全路線。也就是說,將會有公共路線,向用戶提供公開可用的數據,並且不需要獲取訪問令牌,也不需要訪問令牌。如果您的主頁需要爲用戶提取受限制的數據,我的建議是您放棄爲這些路由獲取服務器端數據並通過AJAX請求繼續進行客戶端獲取。 在這種情況下,令牌將從本地存儲中檢索並作爲HTTP請求中的標頭髮送。 – xechelonx

+0

我需要主頁上的訪問令牌,以便用戶可以直接進入應用程序,如果他的會話繼續。您建議我可以將令牌保存到本地存儲中,因此沒有理由不保存在Cookie中。謝謝 – zarax

相關問題