存储

S3认证

了解如何使用Supabase Storage S3进行认证


Supabase Storage S3 提供两种认证方式:

  • 使用从项目设置生成的S3访问密钥(仅限服务端使用)
  • 使用会话令牌(Session Token),可通过用户JWT令牌认证并提供基于行级安全(RLS)的有限访问权限

S3访问密钥

要进行S3认证,您需要:

  1. 生成一对凭证(Access Key ID和Secret Access Key)
  2. 项目设置页面复制终端节点(endpoint)和区域(region)

这些信息足以让您通过任何兼容S3的服务连接Supabase Storage。

Storage S3访问密钥
1
2
3
4
5
6
7
8
9
10
11
import { S3Client } from '@aws-sdk/client-s3';const client = new S3Client({ forcePathStyle: true, region: 'project_region', endpoint: 'https://project_ref.supabase.co/storage/v1/s3', credentials: { accessKeyId: 'your_access_key_id', secretAccessKey: 'your_secret_access_key', }})

会话令牌

您可以使用用户JWT令牌向Supabase S3进行身份验证,通过RLS为所有S3操作提供受限访问权限。这在您希望初始化服务器端针对特定用户的S3客户端,或直接从客户端使用S3客户端时非常有用。

使用会话令牌执行的所有S3操作都限定在已认证用户的范围内。存储模式上的RLS策略会被遵守。

要使用会话令牌向S3进行身份验证,请使用以下凭据:

  • access_key_id: project_ref
  • secret_access_key: anonKey
  • session_token: 有效的jwt令牌

例如,使用aws-sdk库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { S3Client } from '@aws-sdk/client-s3'const { data: { session },} = await supabase.auth.getSession()const client = new S3Client({ forcePathStyle: true, region: 'project_region', endpoint: 'https://project_ref.supabase.co/storage/v1/s3', credentials: { accessKeyId: 'project_ref', secretAccessKey: 'anonKey', sessionToken: session.access_token, },})