2017-02-16 59 views
1

我有點沮喪,在登錄時管理我的JWT令牌,提交和重定向。在我這裏介紹的是我的技術堆棧,以防萬一:JWT令牌AJAX,非AJAX,JQuery的

JQuery/Html -> Node.Js -> Java Restful Services -> MySQL. 

我的Java RESTful服務管理創建JWT令牌返回給它決定如何處理它,並通過它的客戶端上的Node.js的層。這一切都奇妙地起作用。

爲了獲得JWT令牌,我向基於ajax的身份驗證請求發送給Node中間層,該中間層驗證並返回在客戶端上總結爲localstorage的令牌。

現在我不想什麼那麼讓整個網站通過Ajax加載落單頁,這是一個複雜的網站,這樣做僅僅是啞巴!我需要在攜帶JWT令牌時轉發並導航到子頁面。

這裏的問題(最終)...如何在不附加它作爲一個請求或交的參數,因爲這是一個很大的不,不沿JWT令牌發送到中間層(node.js的)?我似乎無法找到一種方法將其與Bearer關聯的標頭填充。

+2

網絡無狀態。您必須在每次請求時傳遞它。 –

+0

我意識到這一點,但我如何正確地將它傳遞給每個請求。 Ajax很容易,因爲我可以設置標題,但正常的href或前鋒是另一回事。 – supertorqued

回答

1

你唯一的選擇是將令牌存儲在cookie中,如果你不想做任何事情,以上建議。您不能在鏈接中設置http標頭。

+0

你是對的,我的意思是一個餅乾.. –

3

需要使用例如一個或cookielocalStorage

AJAX請求

據需要提供在使用HTTP標題中的每個請求令牌的令牌存儲在客戶端。例如

POST /authenticatedService 
Host: example.com 
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 

這是一個示例代碼展示瞭如何使用jQuery來執行AJAX POST請求

形式提交

與表單提交你無法控制的頭由瀏覽器設定,因此它不能夠設定Authorization頭與承載令牌。在這種情況下,你可以

  • 餅乾:存儲在JWT將與表單數據被髮送的cookie。您將需要添加額外的安全性以避免CSRF附加
  • 表單參數:JWT存儲在窗體的隱藏字段中。

總是使用POST(拿不到),以避免JWT

鏈接

鏈接執行GET請求

緩存。你可以建立鏈接加入智威湯遜的查詢參數url?jwt=...

但是,在這種情況下,考慮到安全風險。瀏覽器可以緩存該網址,並且它會出現在日誌中。如果攻擊者有權訪問,攻擊者可能會獲得這些攻擊。此外,用戶可以複製鏈接並將其用於Web應用程序之外(例如,通過電子郵件發送...)

+0

我其實對我的ajax請求有這個,但問題是什麼是處理非Ajax請求的最佳方式,如點擊菜單項從一個節該網站到另一個? – supertorqued

+0

對不起,我沒有閱讀你問題的最後部分。查看更新後的答案 – pedrofb

+1

感謝您的反饋,我正在努力解決這個問題。我通過與鏈接上的類關聯的點擊處理程序動態地將該標記作爲請求參數添加到網址中。在節點端,我從param,header或post變量中獲取令牌,並隨着邏輯進行。 我認爲這至少比將它公開在請求或JS中更安全一些。 – supertorqued