在没有库的情况下生成租户令牌

    在没有库的情况下生成租户令牌是可能的,但不建议这样做。本指南总结了必要的步骤。

    完整的过程需要您创建一个令牌头,准备包含至少一组搜索规则的数据有效负载,然后使用 API 密钥对令牌进行签名。

    准备令牌头

    令牌头必须指定 JWT 类型和一个加密算法。支持的租户令牌加密算法为 HS256HS384HS512

    {
      "alg": "HS256",
      "typ": "JWT"
    }
    

    构建令牌有效负载

    首先,创建一组搜索规则

    {
      "INDEX_NAME": {
        "filter": "ATTRIBUTE = VALUE"
      }
    }
    

    接下来,找到您的默认搜索 API 密钥。查询 获取 API 密钥端点 并检查 uid 字段以获取 API 密钥的 UID

    curl \
      -X GET 'https://127.0.0.1:7700/keys/API_KEY' \
      -H 'Authorization: Bearer MASTER_KEY'
    

    为了最大程度的安全,您还应该为您的租户令牌设置过期日期。以下 Node.js 示例将令牌配置为在创建后 20 分钟过期

    parseInt(Date.now() / 1000) + 20 * 60
    

    最后,将有效负载的所有部分组装成一个对象

    {
      "exp": UNIX_TIMESTAMP,
      "apiKeyUid": "API_KEY_UID",
      "searchRules": {
        "INDEX_NAME": {
          "filter": "ATTRIBUTE = VALUE"
        }
      }
    }
    

    有关每个有效负载字段的要求的更多信息,请参阅 令牌有效负载参考

    编码标头和有效负载

    然后,您必须将标头和有效负载都编码为 base64,将它们连接起来,并使用您选择的加密算法对其进行签名来生成令牌。

    使用租户令牌发出搜索请求

    签署令牌后,您可以使用它来发出搜索查询,方式与使用 API 密钥的方式相同。

    curl \
      -X POST 'https://127.0.0.1:7700/indexes/patient_medical_records/search' \
      -H 'Authorization: Bearer TENANT_TOKEN'