认证架构
Supabase 认证背后的架构设计。
Supabase 认证包含四个主要层级:
- 客户端层。可以是 Supabase 客户端 SDK 之一,也可以使用您选择的 HTTP 客户端手动发起 HTTP 请求。
- Kong API 网关。这是所有 Supabase 产品共享的组件。
- 认证服务(原名为 GoTrue)。
- Postgres 数据库。这是所有 Supabase 产品共享的组件。
客户端层
客户端层运行在您的应用中,可能存在于多种环境中,包括:
- 前端浏览器代码
- 后端服务器代码
- 原生应用程序
客户端层提供了用于用户登录和管理的功能函数。我们推荐使用 Supabase 客户端 SDK,它们可以处理:
- 对 Supabase 认证后端 HTTP 调用的配置和认证
- 在应用存储介质中持久化、刷新和移除认证令牌
- 与其他 Supabase 产品的集成
但其核心功能是管理 HTTP 调用,因此您也可以根据需要自行编写客户端层。
更多信息请参阅客户端 SDK 文档:
认证服务
认证服务是由Supabase编写和维护的Auth API服务器。它是GoTrue项目的一个分支,最初由Netlify创建。
当您部署新的Supabase项目时,我们会将此服务器实例与您的数据库一同部署,并将所需的认证模式注入到您的数据库中。
认证服务负责:
- 验证、签发和刷新JWT令牌
- 作为应用程序与数据库中认证信息的中介
- 与外部提供商通信实现社交登录和单点登录(SSO)
Postgres
Supabase认证使用Postgres数据库中的auth
模式来存储用户表和其他信息。出于安全考虑,此模式不会在自动生成的API中公开。
您可以通过数据库触发器和外键将认证信息与您自己的对象关联。确保您为认证数据创建的任何视图都通过启用RLS或撤销授权得到充分保护。
请确保您为认证数据创建的任何视图都受到保护。
从Postgres 15版本开始,使用security_invoker
创建的视图会继承底层表的RLS策略。早期版本的视图,或未使用security_invoker
创建的视图,会继承所有者的权限,所有者可以绕过RLS策略。