Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Client should authorize Gateway to space/content/serve Spaces by default #158

Open
2 tasks done
Tracked by #135
hannahhoward opened this issue Oct 9, 2024 · 1 comment
Open
2 tasks done
Tracked by #135
Assignees

Comments

@hannahhoward
Copy link
Member

hannahhoward commented Oct 9, 2024

The Uploader says, "I generally want people to access the files I upload, so now that the Gateway will require authorization, I need to authorize it.

Acceptance Criteria

  1. If a user creates a space, then the gateway must be authorized to serve the content of this space. So a new delegation space/content/serve/* must be stored in the Delegations Store (Freeway can learn about space/content/serve/* delegations #160), so the Gateway can find it, validate, and authorize the request.
  2. If the content is served, an egress event must be stored in the egress-traffic-events store in DynamoDB each time the content is requested. Without the proper space/content/serve/* delegation the egress event is not generated.

Main Tasks

Open Questions

@hannahhoward hannahhoward converted this from a draft issue Oct 9, 2024
@hannahhoward hannahhoward changed the title Private Data Initial Steps Delegation Logic in Client for space/content/serve Oct 9, 2024
@hannahhoward hannahhoward changed the title Delegation Logic in Client for space/content/serve Logic in Client to store delegations for space/content/serve Oct 9, 2024
@Peeja Peeja changed the title Logic in Client to store delegations for space/content/serve Client should authorize Gateway to space/content/serve Spaces by default Oct 29, 2024
@fforbeck fforbeck mentioned this issue Nov 25, 2024
10 tasks
@fforbeck fforbeck self-assigned this Nov 25, 2024
@fforbeck fforbeck moved this from Sprint Backlog to In Progress in Storacha Project Planning Nov 25, 2024
@fforbeck
Copy link
Member

fforbeck commented Nov 27, 2024

Gateway Content Serve Authorization Flow

flowchart TD
    subgraph Client Side
        A[User] -->|Creates Space & Authorizes Gateway| B[w3up-client]
    end
    
    subgraph Cloudflare Workers
        C[Access/Delegate Endpoint]
        F[Freeway Worker]
    end
    
    subgraph KV Storage
        D[Delegations Store]
    end

    B -->|UCAN: access/delegate| C
    C -->|Validates Space & Proof Chain| E[Validate Space Exists & Capability]
    E -->|Stores Valid Delegation| D
    F -->|Retrieves Delegation| D[Delegations Store]
Loading

Explanation

  1. User Interaction: The user interacts with the w3up-client to create a space and authorize the gateway to serve content.

  2. UCAN Invocation: The w3up-client invokes the access/delegate UCAN handler, providing the delegation details ({ space, proofs }). The request is sent to the Cloudflare Access/Delegate Endpoint.

  3. Validation Steps:

    • The endpoint checks whether the space referenced in the delegation has been provisioned.
    • It validates that the delegation matches the expected capability (space/content/serve/*).
    • It ensures the proof chain is valid.
  4. Relevance Check: Only delegations associated with a provisioned space are accepted to prevent unnecessary resource usage and mitigate the risk of DoS attacks.

  5. Storing Delegation: After successful validation, the delegation is stored in the KV Store (Delegations Store) for further use.

  6. Freeway Worker Retrieval: The Freeway Worker retrieves the validated delegations from the KV Store to serve content for authorized spaces.

Key Considerations

  • Mitigating DoS Attacks: By verifying that the space is provisioned before accepting the delegation, we can reduce the risk of abuse from unauthorized or irrelevant requests.
  • Efficiency: This additional validation ensures only relevant delegations are processed and stored, minimizing resource waste.
  • Implementation: Adding a check against the space provisioning status in the Access/Delegate Endpoint can be done efficiently by querying the space registry or relevant provisioning database. I will probably tackle that in a second iteration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: In Progress
Development

No branches or pull requests

3 participants