API Key, Token 差別解釋

API Key, Token 差別解釋

API Key 是一串字串,主要用來識別來自 API 用戶端的應用程式。API 金鑰通常與部署呼叫應用程式的特定伺服器相關聯。當應用程式提出 API 請求時,伺服器會透過 API 金鑰識別呼叫的應用程式。通常我們會用 API Key 作 server-to-server 的外部資料存取。

相比之下,Token 會包含資料,裡面存的是使用者階段 (session) 以及使用者權限範圍。通常我們會使用 Token 來作使用者驗證、權限管理等。

他們說電腦科學最難的兩個問題是快取失效和命名。 老實說,這並沒有錯。 這些都超難。

‍命名事物的困難在於清晰而簡潔。 變數、術語、函數或類別的含義不應有任何疑問。 如果您認為一個術語可能意味著兩件事之一,那麼它的命名不正確。

‍API 金鑰和令牌就是這種情況。 前幾天我在一次討論中,這兩個字可以互換使用。 大約兩分鐘後,我不得不停止談話並說“你知道它們是不同的,對吧?”

‍顯然他們不知道。 事實證明,很多人都無法告訴我 API 金鑰和令牌之間的差異。 所以讓我們澄清事實。

定義
我們可以透過以下定義來區分 API 金鑰和令牌:

API 金鑰 – 呼叫 API 時程式碼提供的值,用於識別和授權呼叫者。 它旨在以程式設計方式使用,通常是一長串字母和數字。
令牌 – 代表使用者會話或特定權限的一段資料。 供個人用戶在有限的時間內使用。
世代
兩者之間的創建方法通常也不同。

API 金鑰 – 通常透過使用者介面建立一次,並且在輪換之前保持靜態。 這些可以選擇配置為在一定時間後過期。
令牌 – 在成功驗證或登入事件時動態產生。 通常過期時間較短,但可以刷新較長時間。
範圍
如果不討論權限範圍,就不會討論身份驗證。 權限範圍是指授權部分或使用提供的身份驗證方法時可以執行哪些功能。

API 金鑰 – 固定的、不變的應用程式功能權限集。 誰擁有密鑰就可以存取允許的資源。
令牌 – 僅限於個人有權存取的特定資料或功能。 這可能會受到角色或其他業務層級要求的影響。 往往更關注數據限制。
安全
每種方法的安全性如何? 如果密鑰或令牌被惡意用戶洩露或獲取,潛在的損害有多嚴重?

API 金鑰 – 由於這些金鑰通常是長期存在的並且不限制對資料的訪問​​,因此如果受到損害,這些金鑰可能會造成毀滅性的後果。 他們要求撤銷金鑰作為解決問題的唯一手段。 應用程式通常需要具有良好的可觀察性,以識別受損密鑰並找到惡意用戶。
令牌 – 設計時考慮到安全性。 通常是短暫的並且很容易被撤銷。 受損的令牌僅具有使用者有權存取的資料範圍,並且將自動過期。
用例
那麼,什麼時候你會使用其中一種而不是另一種呢? 看起來他們在利弊之間取得了很好的平衡。

API 金鑰 – 用於伺服器到伺服器的通訊、存取天氣 API 等公共資料、與第三方系統整合。
令牌 – 用於使用者身份驗證、細粒度存取控制 (FGAC)、授予對資源的臨時存取權限、瀏覽器存取權限以及管理使用者會話。
例子
現在我們了解了兩者之間的區別,讓我們來看看使用 Momento JavaScript SDK 的兩個實際範例。

API 金鑰
我確實說過 API 金鑰通常是透過使用者介面發布的。 考慮到這一點,我沒有可以分享的程式碼範例。 不過,以下是您作為使用者如何透過 Momento 控制台取得 API 金鑰的方法。

您可以選擇所需的權限,設定可選的到期日期,然後產生。 然後,您可以立即在工作流程中使用 API 金鑰。

TOKEN

與成功登入時頒發的基於使用者的一次性令牌進行比較。 我們可以採用基於角色的範例,該使用者可以對日曆事件快取進行唯讀訪問,但可以發布和訂閱對協作主題的存取權限。

您可以在此處看到,我們建立了一個有效期為 15 分鐘的令牌,其範圍為功能的唯讀權限,並且僅允許存取以使用者所屬的tenantId 開頭的快取項目。 因此,我們根據使用者的屬性限制了功能和資料。

重點
API 金鑰和令牌各有優缺點。 一個並不比另一個更好。 與計算機科學中的所有事物一樣,這取決於您的用例。 在決定要實施哪種身份驗證機制時,請考慮您的用戶將如何與您的應用程式互動。

‍是基於使用者的網路會話嗎? 帶著代幣去吧。 也許您只期望以程式設計方式訪問,而無需確定可用資料的範圍。 使用 API 金鑰。 請隨意將我們的參考表保存在頂部以供快速參考。

‍無論您採取何種方式,請記得確保您的資料安全。 沒有人希望資料外洩導致他們停業。 注意安全。