文档›指南›Verify a user's JWT 在后端验证用户的 JWT
您自己的后端可以仅使用项目 URL 检查请求是否来自已登录用户以及任何 JOSE 库。
6分钟 读取·级别 中间·修改于 2026年10月25日
该英文文本是根据法文原文自动生成的,尚未经过审查。
自此翻译以来,英文来源已发生变化。某些信息可能已过时。
该页面已自动翻译。英文版具有权威性。
每个项目都有其 自己的 ES256 (ECDSA P-256) 密钥。访问令牌标头携带该密钥的 kid,并且声明携带:
iss: <project URL>/v1/auth (例如 https://my-app-x1y2z3.aurabase.cloud/v1/auth),
aud:项目标识符,
sub:用户 ID,加上 role、 email、 app_metadata 和 user_metadata。
公钥在 <project URL>/.well-known/jwks.json处提供,无需任何 API 密钥。不会与您的后端共享任何秘密,并且一个项目的令牌会被另一个项目的密钥拒绝。
Studio › 设置 › API 显示 JWKS URL、发行者和当前 kid。
verify.tstypescript
import { createRemoteJWKSet, jwtVerify } from 'jose'
const PROJECT_URL = process.env.AURABASE_URL! // https://<slug>.aurabase.cloud
const PROJECT_ID = process.env.AURABASE_PROJECT_ID!
// jose 缓存密钥并在遇到未知孩子时重新获取(轮换)。
const jwks = createRemoteJWKSet(new URL(`${PROJECT_URL}/.well-known/jwks.json`))
export async function verifyAccessToken(token: string) {
const { payload } = await jwtVerify(token, jwks, {
issuer: `${PROJECT_URL}/v1/auth`,
audience: PROJECT_ID,
algorithms: ['ES256'],
})
return payload // Payload.sub 是用户 ID
}
verify.pypython
import os
import jwt # pip install“pyjwt[加密]”
PROJECT_URL = os.environ["AURABASE_URL"]
PROJECT_ID = os.environ["AURABASE_PROJECT_ID"]
jwks = jwt.PyJWKClient(f"{PROJECT_URL}/.well-known/jwks.json")
def verify_access_token(token: str) -> dict:
key = jwks.get_signing_key_from_jwt(token).key
return jwt.decode(
token,
key,
algorithms=["ES256"],
issuer=f"{PROJECT_URL}/v1/auth",
audience=PROJECT_ID,
)
verify.gogo
package main
import (
"fmt"
"os"
"github.com/MicahParks/keyfunc/v3"
"github.com/golang-jwt/jwt/v5"
)
func verify(token string) (jwt.MapClaims, error) {
projectURL := os.Getenv("AURABASE_URL")
jwks, err := keyfunc.NewDefault([]string{projectURL + "/.well-known/jwks.json"})
if err != nil {
return nil, err
}
claims := jwt.MapClaims{}
_, err = jwt.ParseWithClaims(token, claims, jwks.Keyfunc,
jwt.WithValidMethods([]string{"ES256"}),
jwt.WithIssuer(projectURL+"/v1/auth"),
jwt.WithAudience(os.Getenv("AURABASE_PROJECT_ID")),
)
if err != nil {
return nil, fmt.Errorf("invalid token: %w", err)
}
return claims, nil
}
在 Studio 中旋转密钥(或使用 POST /v1/auth/admin/signing-keys/rotate 和 service_role 密钥)会为每个新令牌生成一个新密钥。之前的密钥会在 JWKS 中保留 24 小时,因此轮换之前签名的令牌会继续验证;一旦泄露的密钥不再是活动密钥,就可以使用 DELETE /v1/auth/admin/signing-keys/<kid> 撤销该密钥,然后从 JWKS 中删除并拒绝。
信息
在 JavaScript SDK 中,aura.auth.getClaims() 已使用此 JWKS 在本地验证会话令牌并返回其真实声明。