Logto x Hasura:使用 JWT 進行訪問控制
本綜合指南概述了將 Logto 與 Hasura 的 JWT 模式訪問控制集成的步驟,有效地增強了數據安全性。
Hasura 是一個可以快速提供對應的 GraphQL 和 REST API 以適應你的數據的工具。考慮到數據安全性,Hasura 也提供了為每個不同的 API 進行訪問控制的微調能力。
通常,Hasura 用戶會使用其他身份管理和身份驗證服務,Logto 是其中非常受歡迎的一個。
在這篇博客文章中,我們將假設你已經在使用 Hasura 服務。我們將介紹如何將 Hasura 和 Logto 集成,以最大限度地提高你的數據安全性。如果你還沒有 Logto 帳戶,立即註冊並開始使用吧!
背景
Hasura 使用 基於角色的訪問管理,而 Logto 使用標準的 基於角色的訪問控制(RBAC)。
在 Logto 的 RBAC 模型和最佳實踐中,我們建議用戶使用 scope
對應到許可權的最細粒度,使用 role
作為一組 scope
方便進行批量操作,並最終檢查 scope
(通常在資源提供者一側)來驗證用戶是否可以執行特定操作。
在 Hasura 中,role
對應於許可權的最細粒度,並對 role
s 進行許可權檢查。因此,在 Logto 的配置過程中,我們建議將一個 role
映射到一個 scope
。這種方法可以將 Logto 和 Hasura 的許可權連結在一起,以避免混淆和誤用。
Hasura 可以使用 Webhooks 或 JWT 支援訪問控制。我們之前的 博客文章 介紹了如何使用 Webhooks,在接下來的部分,我們將解釋如何利用 Hasura 的 JWT 模式訪問控制。
開始使用
讓我們從一個簡單的例子開始。假設一個用戶在 Hasura 中已經擁有兩個 API,GET /user
和 PATCH /user
,分別對應兩個 roles:user:reader
和 user:maintainer
。
1. 在 Logto 創建 Hasura API 資源
在 Logto 中創建一個 Hasura API 資源。
2. 在 Logto 根據 Hasura 設置創建 roles
我們需要為步驟1中提到的 Hasura API 資源創建兩個 scope
,即 read:user
和 maintain:user
,然後創建兩個 roles:user:reader
(包含 read:user
scope)和 user:maintainer
(包含 maintain:user
scope)以一對一對應 Hasura 的 roles。並根據需要為 Logto 用戶分配這些 roles。
3. 配置 Hasura 環境變量 HASURA_GRAPHQL_JWT_SECRET
以啟用 JWT 模式
通過查看 Hasura JWT 配置選項,我們需要添加和配置環境變量 HASURA_GRAPHQL_JWT_SECRET
才能使用 JWT 進行訪問控制。
有很多不同的選項可以配置,但這裡我們介紹最簡單的情況:只需配置 jwk_url
。該值可以從你的 Logto 的 OpenID 配置端點獲得(https://your.logto.domain/oidc/.well-known/openid-configuration)。
4. 定制用戶訪問令牌額外聲明
使用 Logto 的自定義 JWT 功能,定制邏輯以將額外的聲明添加到 JWT 格式的用戶訪問令牌中。
定制 getCustomJwtClaims
方法在 JWT 中添加 Hasura 用於實現訪問控制所依賴的數據。這可以包括在那個實例中被授權的用戶相關的數據,包括他們擁有的 role
s,可以通過 context
訪問。
我們還定義了一個環境變量 USER_DEFAULT_ROLE_NAMES
以避免硬編碼。
5. 集成 Logto SDK
配置 Logto 和 Hasura 後,將你的應用集成到 Logto SDK。這裡我們使用一個 Next 示例來預覽用戶登錄後由 Logto 發出的用戶訪問令牌。
首先,我們將先前創建的 user:reader
和 user:maintainer
roles 分配給用戶,然後以該用戶身份登入。
獲取用戶訪問令牌並請求 Hasura APIs:
結論
在這篇文章中,我們提供了 Hasura 支援的另一種基於 JWT 的訪問控制方法,除了 Webhook 之外。
通過比較 Hasura 的 Webhook 和 JWT 訪問控制的過程,我們可以看到 Webhook 方法對每個 Hasura 請求發送一個 Webhook 給 Logto 並等待回應,而基於 JWT 的方法可以持續使用直到 JWT 過期。
JWT 方法可以減少網絡負載並消除由 Webhook 帶來的網絡延遲;同時,Webhook 方法可以實時同步用戶許可權的變化。
用戶可以根據這些結論,結合他們的實際業務需求,選擇合適的方法。