术语表
Supabase 文档中使用的术语和缩写定义
访问令牌 (Access token)
访问令牌是一种短期有效的令牌(通常不超过1小时),用于授权客户端访问服务器资源。它以 JSON Web Token (JWT) 的形式存在。
认证 (Authentication)
认证(常缩写为 authn.
)是验证用户身份的过程。用户身份验证可以通过多种方式实现:
- 要求用户提供他们知道的信息。例如:密码、口令
- 验证用户拥有某些物品。例如:电子邮件地址、电话号码、硬件密钥、恢复代码
- 确认用户的生物特征。例如:指纹、特定面部结构、虹膜特征
认证器应用 (Authenticator app)
认证器应用用于生成基于时间的一次性密码(TOTP)。这些密码基于一个长且难以猜测的密钥字符串生成。初始密钥通常通过扫描二维码传递给应用程序。
授权 (Authorization)
授权(常缩写为 authz.
)是验证特定身份是否有权访问资源的过程。授权通常通过验证访问令牌来实现。
身份提供者 (Identity provider)
身份提供者是指允许第三方应用程序在不交换密码的情况下识别用户的软件或服务。如果没有身份提供者,社交登录和企业单点登录将无法实现。
社交登录平台通常使用 OAuth 协议,而企业单点登录则基于 OIDC 或 SAML 协议。
JSON Web Token (JWT)
JSON Web Token 是一种数据结构,以字符串形式表示,通常包含用户的身份和授权信息。它编码了令牌的生命周期信息,并使用加密密钥进行签名,使其具备防篡改特性。
访问令牌就是JWT,通过检查其中包含的信息,您可以允许或拒绝对资源的访问。行级安全策略正是基于JWT中的信息构建的。
JWT签名密钥
Supabase签发的JWT使用HMAC-SHA256算法进行签名。签名过程中使用的密钥称为JWT签名密钥。您不应将此密钥与不信任的人或事物共享,也不应公开披露。任何获得该密钥的人都可以创建任意JWT。
多因素认证(MFA或2FA)
多因素认证是通过组合多种因素来验证用户身份的过程:用户知道的信息(如密码)、用户拥有的设备(如手机)或用户本身的特征(如指纹)。
Nonce(一次性随机数)
Nonce意为"一次性使用的数字"。实际上,它是一个独特且难以猜测的字符串,用于安全地初始化协议或算法,或者检测各种形式的重放攻击。
OAuth
OAuth是一种协议,允许第三方应用程序请求并获取其用户的授权。它通常用于实现社交登录,并作为OIDC协议中企业单点登录的基础。应用程序可以请求不同级别的访问权限,包括基本的用户身份信息,如姓名、电子邮件地址和用户ID。
OIDC
OIDC代表OpenID Connect,是一种实现企业单点登录的协议。OIDC基于现代Web技术,如OAuth和JSON Web Tokens。它通常被用来替代较旧的SAML协议。
一次性密码 (OTP)
一次性密码是一种简短、随机生成且难以猜测的密码或代码,它会发送到设备(如手机号码)或由设备/应用程序生成。
密码哈希函数
密码哈希函数是专门设计的算法,使网络服务器能够在不直接存储密码的情况下验证密码。与通过安全随机数生成器产生的其他难以猜测的字符串不同,密码由用户选择且通常容易被攻击者猜中。这些算法会显著减慢并大幅提高攻击者猜测密码的成本。
目前公认的三种密码哈希函数是:Argon2、bcrypt 和 scrypt。
密码强度
密码强度是衡量密码被猜测难易程度的指标。简单衡量方法包括计算密码所用字符类型的组合可能性。例如纯字母密码的变体数量少于包含字母和数字的密码。更优的衡量策略包括检测密码与已知单词、短语或常见密码的相似度。
PKCE(代码交换证明密钥)
PKCE 是 OAuth 协议的扩展,用于在应用程序(Web 应用、单页应用或移动应用)与授权服务器之间安全交换刷新令牌和访问令牌。它适用于令牌交换可能被第三方(如操作系统上运行的其他应用)拦截的场景。这在移动设备上尤为常见,因为操作系统可能会将 URL 分发给其他应用。单页应用有时也可能面临此类风险。
提供商刷新令牌
提供商刷新令牌是由第三方身份提供商颁发的刷新令牌,可用于刷新返回的提供商令牌。
提供商令牌
提供商令牌是由第三方身份提供商颁发的长期有效令牌。这些令牌由社交登录服务(如Google、Twitter、Apple、Microsoft等)颁发,用于唯一标识这些平台上的用户。
刷新令牌
刷新令牌是一种长期有效(在大多数情况下具有无限期寿命)的令牌,设计用于仅交换一次以获取新的刷新令牌和访问令牌。一旦刷新令牌被交换,它就会失效且无法再次交换。不过在实际应用中,刷新令牌可以在短时间内多次交换。
刷新令牌流程
刷新令牌流程是一种基于有效刷新令牌颁发新刷新令牌和访问令牌的机制。该机制用于延长应用程序的授权访问权限。持续使用的应用程序会在访问令牌即将过期时调用刷新令牌流程。
重放攻击
重放攻击是指攻击者窃取或截获敏感信息后,试图再次使用该信息(即重放)以破坏系统的行为。通常可以通过正确使用随机数(nonce)来缓解重放攻击。
行级安全策略(RLS)
行级安全策略是Postgres数据库中的特殊对象,用于限制客户端可执行的操作或可获取的数据。RLS策略利用JWT中包含的信息来识别用户及其被允许执行的操作或查看的数据。
SAML
SAML(安全断言标记语言)是一种实现企业单点登录的协议。SAML诞生于21世纪初,基于XML技术。尽管较新的OIDC(OpenID Connect)协议日益流行,SAML仍是企业单点登录的事实标准。
会话
会话(Session)或认证会话是指将已验证的用户身份与网页浏览器绑定的概念。会话通常是长期有效的,可以通过用户登出来终止。在浏览器中,访问令牌(access token)和刷新令牌(refresh token)的组合代表一个会话,它们存储在本地存储或作为Cookie保存。
单点登录(SSO)
单点登录(Single-sign on)允许企业集中管理账户和应用程序访问权限。企业使用身份提供商(Identity Provider)软件或服务将员工信息组织在目录中,并通过OIDC或SAML协议将这些账户与应用程序连接。
基于时间的一次性密码(TOTP)
基于时间的一次性密码(Time-based one-time password)是从一个密钥定期生成的一次性密码,通常由移动设备上的应用程序(如Google Authenticator、1Password)生成。