租戶令牌有效負載參考

    Meilisearch 的租戶令牌是 JSON Web 令牌 (JWT)。它們的有效負載由三個元素組成:搜尋規則、一個API 金鑰 UID,以及一個可選的到期日

    有效負載範例

    {
      "exp": 1646756934,
      "apiKeyUid": "at5cd97d-5a4b-4226-a868-2d0eb6d197ab",
      "searchRules": {
        "INDEX_NAME": {
          "filter": "attribute = value"
        }
      }
    }
    

    搜尋規則

    搜尋規則物件是一組指令,定義 Meilisearch 將在每次使用特定租戶令牌進行的查詢中強制執行的搜尋參數。

    搜尋規則物件

    searchRules 必須是一個 JSON 物件。每個鍵必須對應一個或多個索引。

    {
      "searchRules": {
        "*": {},
        "INDEX_*": {},
        "INDEX_NAME_A": {}
      }
    }
    

    每個搜尋規則物件可能包含一個 filter 鍵。此 filter 的值必須是一個篩選表達式

    {
      "*": {
        "filter": "attribute_A = value_X AND attribute_B = value_Y"
      }
    }
    

    Meilisearch 會將篩選器應用於使用該租戶令牌進行的所有搜尋。令牌只能存取 searchRules 物件中存在的索引。

    一個令牌可以包含任意數量的索引規則。特定規則集會優先並覆蓋 * 規則。

    危險

    由於租戶令牌是在您的應用程式中產生的,Meilisearch 無法檢查搜尋規則篩選器是否有效。無效的搜尋規則會在搜尋時返回錯誤。

    請參閱搜尋 API 參考資料,以獲取關於 Meilisearch 篩選語法的更多資訊

    搜尋規則也可以是一個空物件。在這種情況下,租戶令牌將可以存取索引中的所有文件。

    {
      "INDEX_NAME": {}
    }
    

    範例

    單一篩選器

    在此範例中,使用者只會收到 user_id 等於 1medical_records 文件。

    {
      "medical_records": {
        "filter": "user_id = 1"
      }
    }
    

    多個篩選器

    在此範例中,使用者只會收到 user_id 等於 1published 欄位等於 truemedical_records 文件。

    {
      "medical_records": {
        "filter": "user_id = 1 AND published = true"
      }
    }
    

    允許存取索引中的所有文件

    在此範例中,使用者可以存取 medical_records 中的所有文件。

    {
      "medical_records": {}
    }
    

    使用部分萬用字元鎖定多個索引

    在此範例中,使用者將收到來自任何以 medical 開頭的索引的文件。這包括諸如 medical_recordsmedical_patents 之類的索引。

    {
      "medical*": {
        "filter": "user_id = 1"
      }
    }
    

    使用萬用字元鎖定所有索引

    在此範例中,使用者將收到來自整個實例中任何索引的文件。

    {
      "*": {
        "filter": "user_id = 1"
      }
    }
    

    手動鎖定多個索引

    在此範例中,使用者可以存取所有索引中 user_id = 1 的文件,除了其中一個。當查詢 medical_records 時,使用者只能存取已發布的文件。

    {
      "*": {
        "filter": "user_id = 1"
      },
      "medical_records": {
        "filter": "user_id = 1 AND published = true",
      }
    }
    

    API 金鑰 UID

    租戶令牌有效負載必須包含 API 金鑰 UID 才能驗證請求。UID 是一個字母數字字串,用於識別 API 金鑰。

    {
      "apiKeyUid": "at5cd97d-5a4b-4226-a868-2d0eb6d197ab"
    }
    

    查詢取得單個 API 金鑰端點以獲取 API 金鑰的 UID。

    UID 必須指示一個有權限進行搜尋操作的 API 金鑰。令牌具有與用於產生它的 API 金鑰相同的索引和路由存取權限。

    由於主金鑰不是 API 金鑰,您不能使用主金鑰建立租戶令牌。避免暴露 API 金鑰,並始終在您的應用程式後端產生令牌

    租戶令牌和過期的 API 金鑰

    如果 API 金鑰過期,使用它建立的任何租戶令牌都將失效。如果由於主金鑰變更而刪除或重新產生 API 金鑰,情況也是如此。

    到期日

    到期日必須是 UNIX 時間戳記或 null

    {
      "exp": 1646756934
    }
    

    令牌的到期日不能超過其父 API 金鑰的到期日。

    設定令牌到期日是可選的,但強烈建議。沒有到期日的令牌將無限期保持有效,並且可能存在安全隱患。

    撤銷沒有到期日的令牌

    撤銷沒有到期日的令牌的唯一方法是刪除其父 API 金鑰。

    變更實例的主金鑰會強制 Meilisearch 重新產生所有 API 金鑰,並且也會使所有現有的租戶令牌失效。