光环标志
光环基地文档
文档›指南›Verify a user's JWT

在后端验证用户的 JWT

您自己的后端可以仅使用项目 URL 检查请求是否来自已登录用户以及任何 JOSE 库。

6分钟 读取·级别 中间·修改于 2026年10月25日
该英文文本是根据法文原文自动生成的,尚未经过审查。
自此翻译以来,英文来源已发生变化。某些信息可能已过时。
该页面已自动翻译。英文版具有权威性。
#
代币

1. 代币如何签名

每个项目都有其 自己的 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。

#
Node.js

2.Node.js(何塞)

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
}
#
蟒蛇

3.Python(PyJWT)

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,
    )
#
去

4. 去

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
}
#
旋转

5. 密钥轮换

在 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 在本地验证会话令牌并返回其真实声明。

最后更新· 2026年10月25日