簡體   English   中英

在節點服務器中生成刷新令牌和訪問令牌

[英]Generating refresh tokens and access tokens in node server

我正在構建手機和 web 應用程序。 兩個應用程序都將與節點服務器通信。 我正在使用 JWT 進行身份驗證。

目前,我有以下代碼來生成訪問令牌:

const token = jwt.sign({ user: body }, "top_secret");

我真的對刷新令牌和訪問令牌感到困惑:

  1. 如何創建刷新令牌?
  2. 刷新令牌是什么樣的?
  3. 我可以創建一個刷新令牌 - 類似於我創建訪問令牌的方式嗎?
  4. 刷新令牌是否僅用於生成新的訪問令牌?
  5. 刷新令牌可以用作訪問令牌嗎?
  6. 如何使訪問令牌無效
  7. 如何使刷新令牌無效? 我見過使用數據庫存儲刷新令牌的示例。 當您想要使訪問令牌無效時,將刪除刷新令牌。 如果刷新令牌將存儲在用戶 model 上的數據庫中以供訪問,對嗎? 在這種情況下似乎應該加密

  8. 當用戶登錄我的應用程序時,我是否同時發送訪問令牌和刷新令牌? 我在某處(不記得在哪里)讀到發送訪問令牌和刷新令牌不是一個好習慣。

  9. 如果同時發送訪問令牌和刷新令牌是不好的做法,那么何時向客戶端發送刷新? 是否應該存在客戶端請求訪問令牌的端點?
  10. 訪問令牌和刷新 toekns 的最佳到期時間是什么?

請注意,在典型的 OAuth2 場景中,頒發令牌的服務器(授權服務器)和使用訪問令牌的 API 服務器(資源服務器)並不相同。 另請參閱: Oauth2 角色

要回答您的問題:

  1. 您在服務器上生成一個足夠熵的字符串,並將其用作授權服務器中數據庫記錄的主鍵。 請參閱刷新令牌語法

  2. https://tools.ietf.org/html/rfc6749#section-1.5

    刷新令牌是一個字符串,表示資源所有者授予客戶端的授權。 該字符串通常對客戶端是不透明的。

  3. 您可以,但刷新令牌通常不是結構化令牌(如 JWT),因為它們由發布它們的同一服務器使用。

  4. 是的

  5. 除非您使用自省令牌,否則沒有一種使它們無效的好方法。 只是讓他們的生命短暫。

  6. 如果從授權服務器存儲中刪除。 如果在服務器上找不到刷新令牌,則不能使用它來刷新訪問令牌。 刷新令牌通常只是保存有關客戶端、用戶和刷新令牌到期數據的數據庫記錄的主鍵。 雖然您不想泄露您的刷新令牌,但它通常需要使用它們的客戶端提供客戶端憑據才能使用它。

  7. 用戶在授權服務器上登錄。 它向客戶端返回訪問令牌和刷新令牌(如果您的客戶端是機密的)。 客戶端單獨使用訪問令牌來訪問您在資源服務器上的數據。

  8. 您的客戶端在對授權服務器的調用中使用刷新令牌來獲取新的訪問令牌。 因此,您的客戶端僅將訪問令牌發送到資源服務器,僅將刷新令牌發送到授權服務器。

  9. 這取決於您的威脅 model。 當您的刷新令牌過期時,用戶將被迫再次進行身份驗證。 一些產品使用永不過期的刷新令牌,其他產品使用僅在幾小時或幾天內有效的刷新令牌。

暫無
暫無

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

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