You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SurrealDB使用外部JWT令牌时认证失败求助

配置外部JWT令牌认证遇到问题求助

我尝试配置SurrealDB使用外部JWT令牌认证,但多次尝试后始终失败,操作步骤如下:

  1. 首先在SurrealDB中定义令牌:
DEFINE TOKEN my_token ON DATABASE TYPE HS512 VALUE '1234567890';
  1. 使用密钥1234567890生成JWT,最初把NS、DB、TK放在Header中:
{
  "alg": "HS512",
  "typ": "JWT",
  "NS": "help",
  "DB": "help",
  "TK": "my_token"
}

注:我也试过把NS、DB、TK放在JWT的Payload部分。

  1. 在JS客户端通过Bearer授权头发起认证请求:
db.authenticate("eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCIsIk5TIjoiaGVscCIsIkRCIjoiaGVscCIsIlRLIjoibXlfdG9rZW4ifQ.e30.uoJypJ-Y9OrZjQW6WtuZWmFYBEOCHlkutbR6mlEYPCHvb49h9nFiWshKDc464MD3jaBh69T1OLwZ2aUWNujiuw")

但不管是JS客户端还是直接HTTP请求,都返回相同错误:

name: "AuthenticationError"
message: "There was a problem with authentication"
stack: "AuthenticationError: There was a problem with authentication\n    at Surreal.

排查解决建议

  • 调整字段位置:SurrealDB要求NS、DB、TK必须放在JWT的Payload里,Header只保留alg和typ即可。正确的Payload示例:
    {
      "NS": "help",
      "DB": "help",
      "TK": "my_token",
      "exp": 1735689600 // 必须添加过期时间,替换为未来的时间戳
    }
    
  • 添加过期时间:SurrealDB默认强制要求JWT包含exp字段,没有的话会直接认证失败。
  • 更换密钥长度:HS512算法建议使用至少32字符的密钥,你当前用的10位密钥可能触发安全校验,换成更长的密钥(比如my_secure_hs512_key_that_is_long_enough)再试。
  • 确认资源存在:确保help命名空间和数据库已经通过CREATE NS help;和CREATE DB help;创建完成,否则令牌关联的资源不存在会导致认证失败。
  • 检查连接状态:调用authenticate前,确认客户端已经成功连接到SurrealDB实例,避免未连接就发起认证请求。

内容的提问来源于stack exchange,提问作者Ashamnx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:20:58