什麼是基於權杖的認證?

基於權杖的驗證是確認使用者或裝置身分的一種方法。它依賴於檢查相關實體是否擁有之前簽發的權杖。

學習目標

閱讀本文後,您將能夠:

  • 定義基於權杖的驗證
  • 描述兩類基於權杖的驗證
  • 對比 Web 應用程式的權杖驗證與基於 Cookie 的驗證

相關內容


想要繼續瞭解嗎?

訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

什麼是基於權杖的認證?

基於權杖的驗證是透過檢查權杖來驗證身分的過程。在存取管理中,伺服器使用權杖驗證來檢查使用者、API、電腦或其他伺服器的身分。

權杖是由受信任的來源頒發的象徵性物品——類似於執法人員攜帶由其機構頒發的徽章,以使其權威合法化。權杖可以是實體的(如 USB 硬金鑰),也可以是數位的(電腦產生的訊息或數位簽名)。

基於權杖的驗證可以指幾個不同的過程:

  1. 透過實體權杖驗證身分。這是一個廣泛使用的登入驗證因素:要求使用者在登入帳戶或裝置時出示其權杖。(驗證是什麼?中對驗證因素進行了更詳細的描述。)
  2. 透過 Web 權杖重新確認身分。Web 權杖是純數位的。Web 權杖由伺服器產生並傳送到用戶端。權杖附加到每個用戶端請求,以便伺服器知道用戶端的身分並知道用戶端可以存取哪些資料。此類基於權杖的驗證與基於 cookie 的驗證形成對比,後者是完成相同事情的類似方式,將在下文中進行詳細介紹。

使用實體權杖的驗證是如何進行的?

透過實體權杖的驗證通常在使用者登入過程中進行。使用者必須證明他們擁有其他人沒有的物品。他們可以透過輸入該物品顯示的程式碼、透過 USB 將物品連接到裝置、透過藍牙連接物品或其他幾種方法來證明這一點。就像輸入密碼證明使用者知道其他人不知曉的內容一樣,使用權杖證明使用者擁有僅該使用者才有的物品。

有兩種權杖用於這種類型的驗證:軟體權杖和硬體權杖。

  • 軟體權杖是指輸入傳送到裝置的密碼或訊息,以證明擁有該裝置。這通常為透過簡訊傳送到智慧型手機的程式碼。
  • 硬體權杖是使用者直接連接到電腦或行動裝置以登入的硬體物品。

透過 Web 權杖的驗證是如何進行的?

網路權杖是數位的,而不是實體物品。它是從伺服器傳送到用戶端並由用戶端臨時儲存的訊息。用戶端在傳送到伺服器的後續請求中包含權杖的複本,以確認用戶端的驗證狀態。

實體權杖驗證會在登入過程中驗證身分,而 Web 權杖則作為成功登入的結果發佈。它們使登入工作階段保持作用中狀態。

但是,將 Web 權杖用於使用者工作階段並非總是理想的。許多開發人員都支援使用 Cookie。Web 權杖可能更適用於 API 端點驗證或驗證伺服器之間的連線,而不是伺服器與用戶端之間的連線。

什麼是 JSON Web 權杖 (JWT)?

在 Web 開發中,「Web 權杖」幾乎總是指JSON Web 權杖。JSON Web 權杖 (JWT) 是用於建立包含 JavaScript 物件標記法 (JSON) 資料的數位簽名 Web 權杖的標準。伺服器建立一個權杖來證明用戶端的身分並將其傳送到用戶端。JWT 使用數位簽名來證明權杖是合法的。

JWT 包括三個元件:

  • 標頭:標頭提供有關 JWT 的資訊——JWT 是哪種權杖以及用於對其進行數位簽名的方法。
  • 裝載:任何 JSON 資料都可以移至此處。用於驗證的 JWT 裝載包括有關裝載中使用者身分的聲明。它們還可以包含有關使用者、伺服器或 API 端點權限的資訊。
  • 數位簽名:簽名採用加密技術,使用金鑰對標頭和裝載進行簽名,以確保它們包含的資料是合法的。可以將數位簽名想像成藥罐上的防篡改密封。

基於權杖 (JWT) 的驗證與基於 Cookie 的驗證

JWT 有時用於在使用者登入 Web 應用程式後保持其身分已通過驗證。但是,Cookie 也可以用於此目的。

Cookie 是伺服器傳送到用戶端的小型資料檔案。當使用者登入到 Web 應用程式時,伺服器會產生一個 Cookie 並將其傳送到用戶端裝置(通常是使用者的電腦或智慧型手機)。用戶端裝置將 Cookie 儲存在瀏覽器的快取中,並在之後對伺服器的請求中包含 Cookie 的複本,類似於 JWT 的使用方式。使用者登出后,瀏覽器將刪除 Cookie。

與 JWT 相比,Cookie 的檔案要小得多,因為 JWT 除了裝載外,還包括標頭和數位簽名。相比之下,Cookie 僅包含裝載。這使得它們在 Web 效能和頻寬方面效率更高。

  • Web 效能:Cookie 載入速度更快,因為它包含的資訊更少——就好比相片的下載速度比影片快。
  • 頻寬:由於 Cookie 較小,它們減少了需要在用戶端和伺服器之間透過網路傳遞的資料總量。與 JWT 相比,這可能會為 Web 應用程式操作員節省成本。

JWT 未針對效能進行最佳化,因為它們包含數位簽名,可確保其內容未被篡改。但是,如果 Web 應用程式使用 HTTPS它應當如此),那麼 Cookie 無論如何都應該是防篡改的。HTTPS 將對 cookie 以及用戶端和伺服器之間交換的所有其他 HTTP 資料進行加密和簽名,攻擊者應該無法偽造它或在傳輸過程中攔截它,除非他們進行中間人攻擊

JWT 更適合 API 和伺服器到伺服器連線。此類用途不需要過多擴展:一個 Web 應用程式可能會獲得一百萬使用者,但它不會有一百萬個 API 連線。這減少了對效能和頻寬的潛在影響。但是,其他驗證方法(如相互 TLS)有時對 API 更有效——詳細瞭解相互 TLS