Auth0 集成
在 Supabase 项目中使用 Auth0
Auth0 可以作为第三方认证提供商与 Supabase Auth 配合使用,也可以独立用于您的 Supabase 项目。
开始使用
- 首先需要添加集成来连接您的 Supabase 项目与 Auth0 租户。您需要提供租户 ID(某些情况下还需要区域 ID)。
- 在项目的认证设置中添加新的第三方认证集成。
- 通过使用 Auth0 Action 为所有 JWT 分配
role: 'authenticated'
自定义声明。 - 最后在您的应用程序中设置 Supabase 客户端。
配置 Supabase 客户端库
123456789101112131415161718192021import { createClient } from '@supabase/supabase-js'import Auth0Client from '@auth0/auth0-spa-js'const auth0 = new Auth0Client({ domain: '<AUTH0_DOMAIN>', clientId: '<AUTH0_CLIENT_ID>', authorizationParams: { redirect_uri: '<MY_CALLBACK_URL>', },})const supabase = createClient('https://<supabase-project>.supabase.co', 'SUPABASE_ANON_KEY', { accessToken: async () => { const accessToken = await auth0.getTokenSilently() // 也可以使用 (await auth0.getIdTokenClaims()).__raw // 来获取 ID token 替代 access token return accessToken },})
为项目添加新的第三方认证集成
在仪表盘中导航至项目的认证设置,找到"第三方认证"部分来添加新的集成。
在CLI中,将以下配置添加到您的supabase/config.toml
文件中:
1234[auth.third_party.auth0]enabled = truetenant = "<id>"tenant_region = "<region>" # 如果您的租户有区域设置
使用Auth0 Action分配认证角色
您的Supabase项目会检查所有发送给它的JWT中的role
声明,以便在使用数据API、存储或实时授权时分配正确的Postgres角色。
默认情况下,Auth0的JWT(包括访问令牌和ID令牌)不包含role
声明。如果您向Supabase项目发送这样的JWT,在执行Postgres查询时将分配anon
角色。您应用的大部分逻辑应该由authenticated
角色访问。
推荐的做法是配置onExecutePostLogin
Auth0 Action来添加自定义声明:
123exports.onExecutePostLogin = async (event, api) => { api.accessToken.setCustomClaim('role', 'authenticated')}
限制
目前不支持使用以下签名算法的Auth0租户:
- HS256 (HMAC with SHA-256) —— 也称为对称JWT
- PS256 (RSA-PSS with SHA-256)