Skip to content

Docs: S3 Compatability: Get Presigned URL isn't authorized from client #634

@Vandivier

Description

@Vandivier

EDIT: THE BELOW BUG REPORT IS SOLVED AND NOW IT IS A DOCS ENHANCEMENT ISSUE. SEE FINAL COMMENT FOR INFO

Description

Supabase Storage currently uses a JWT-based token system for presigned URLs, which differs from the AWS S3 standard that uses AWSAccessKeyId, Signature, and Expires query parameters. This makes it difficult to integrate applications that expect AWS-style presigned URLs.

Steps to Reproduce

Generate a presigned URL for a Supabase storage object.
Compare it with an AWS S3-style presigned URL, which includes AWSAccessKeyId, Signature, and Expires.
Attempt to use an AWS-compatible library to fetch the object using the Supabase URL (it fails).

Expected Behavior

Supabase should provide an AWS S3-style presigned URL that can be loaded into a video element on the web client.

Actual Behavior

After communicating with Supabase, boto3 produces an AWS S3-style presigned URL but it cannot be loaded into the video element. A JWT-based presigned URL does work.

Workarounds & Challenges

Use the Supabase-specific storage/v1/object/sign API, but this requires implementing custom logic for handling tokens instead of using AWS SDKs directly.

Environment

Python 3.9.19
boto3 1.7.84
Developing on git bash, I don't think that matters though

Additional Context

see def get_videos() in
stephengpope/no-code-architects-toolkit@9723bfe

This feature would help users migrate from AWS S3 to Supabase Storage without breaking existing integrations.

Kinda related issues?
#544
#465

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions