如何在本地生成Supabase的ANON_KEY与JWT_SECRET?
1. 生成JWT_SECRET
JWT_SECRET是用于签名、验证所有Supabase相关JWT令牌的高强度随机密钥,直接用本地工具即可生成:
- 用
openssl生成64位十六进制密钥(推荐,安全性高):openssl rand -hex 32 - 或用
uuidgen生成无分隔符的UUID:uuidgen | tr -d '-'
生成后务必妥善保存该字符串,后续步骤会用到。
2. 生成ANON_KEY
ANON_KEY本质是预签名的JWT令牌,其固定Payload为:
{"role": "anon", "iss": "supabase"}
你需要用刚才生成的JWT_SECRET,以HS256算法签名这个Payload,得到的结果就是ANON_KEY。以下是几种本地实现方式:
方式一:使用jwt-cli(推荐)
如果本地已安装jwt-cli(可通过包管理器安装,如brew install jwt-cli或apt install jwt-cli),执行命令:
echo '{"role": "anon", "iss": "supabase"}' | jwt encode --secret YOUR_JWT_SECRET --alg HS256
替换YOUR_JWT_SECRET为你生成的密钥,输出的字符串即为ANON_KEY。
方式二:使用Node.js脚本
先安装jsonwebtoken包:npm install jsonwebtoken,再创建脚本文件:
const jwt = require('jsonwebtoken'); const secret = 'YOUR_JWT_SECRET'; // 替换为你的JWT_SECRET const payload = { role: 'anon', iss: 'supabase' }; const anonKey = jwt.sign(payload, secret, { algorithm: 'HS256' }); console.log(anonKey);
运行脚本node generate-anon-key.js即可得到ANON_KEY。
方式三:使用Python脚本
先安装pyjwt库:pip install pyjwt,再执行以下代码:
import jwt secret = "YOUR_JWT_SECRET" # 替换为你的JWT_SECRET payload = {"role": "anon", "iss": "supabase"} anon_key = jwt.encode(payload, secret, algorithm="HS256") print(anon_key)
3. 验证有效性(可选)
可通过JWT_SECRET验证ANON_KEY是否正确:
- 用jwt-cli执行:
echo YOUR_ANON_KEY | jwt decode --secret YOUR_JWT_SECRET
输出的Payload需与{"role": "anon", "iss": "supabase"}完全一致,说明生成有效。
关于Kong的说明
Supabase用Kong作为API网关处理JWT认证,核心逻辑是Kong会读取你配置的JWT_SECRET,验证所有传入JWT令牌的合法性。只要你生成的ANON_KEY使用了正确的Payload和JWT_SECRET签名,Kong就能正常识别并允许匿名用户请求,无需额外复杂配置——只需确保JWT_SECRET在Supabase和Kong的配置中完全一致即可。
内容的提问来源于stack exchange,提问作者Hafiz Mansoor

