簡體   English   中英

我在哪里存儲刷新令牌和訪問令牌以及如何使用它?

[英]Where do I store the refresh token and access token and how do I use it?

我無法輕易決定如何從后端接收刷新令牌和訪問令牌以及將其存儲在何處。

我理解的認證過程如下。

  1. XSS可以用cookies防御。
  2. 使用 cookies 容易受到 CSRF 的影響。
  3. 但是,在 cookie 的情況下,它可以作為“document.cookie”被盜。 因此,使用“ httponly ”選項來阻止來自 javascript 的訪問。
  4. 在發出 http 請求時,cookie 總是包含在 header 中,因此容易受到 CSRF 的攻擊。 因此,登錄時,在后端創建“刷新令牌”和“訪問令牌”,存儲在數據庫中,並返回給客戶端。
  5. 使用訪問令牌請求 api,如果過期,則使用刷新令牌對其進行更新。

正如我提到的許多文章,據說 XSS 將被 cookies 阻止,CSRF 將被刷新令牌和訪問令牌保護。

在刷新令牌的情況下,它存儲在 webStorage 中。

但是,為了防止XSS,似乎在訪問令牌的情況下,應該使用cookies來保護它們(+ httponly apply),而在刷新令牌的情況下,似乎應該將它們存儲在客戶端中。

如果刷新令牌是在帶有 httponly 選項的 cookie 中發送的,它不能從客戶端訪問嗎?


綜上所述...

在后端服務器中,訪問令牌是否應該作為 cookie 發送,而刷新令牌是否應該包含在正文中?

任何想法,將不勝感激。

令牌通常在響應的正文中發回。 這樣,您的前端應用程序可以輕松讀取它們並在需要的地方存儲。 通常將它們存儲在 memory 中就足夠了(在您的應用程序的變量或 state 等中)。 當用戶刷新頁面時,他們將不得不再次登錄,但如果授權服務器支持“記住我”之類的功能,那應該不是問題。 如果您使用的是符合 OpenID Connect 的授權服務器,那么您可以執行靜默登錄 - 因此無需將用戶重定向到任何地方即可獲取令牌。

如果您將令牌存儲在僅限 http 的 cookie 中,那么您的應用將無法訪問它們,因此您將無法從您的應用調用任何 API。 我認為這不是你想要達到的目標。

將令牌保存在 memory 中可以幫助您更安全地免受 XSS 攻擊,但您永遠不會 100% 安全。 看看這個演講: https://pragmaticwebsecurity.com/talks/xssoauth.html解釋。 事實上,確保 XSS 攻擊無法竊取您的令牌的唯一方法是將令牌保存在后端應用程序中,而不是瀏覽器中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM