Skip to content

MSC4250: Authenticated media v2 (Cookie authentication for Client-Server API)#4250

Open
turt2live wants to merge 2 commits into
mainfrom
travis/msc/authenticated-media-v2
Open

MSC4250: Authenticated media v2 (Cookie authentication for Client-Server API)#4250
turt2live wants to merge 2 commits into
mainfrom
travis/msc/authenticated-media-v2

Conversation

@turt2live

@turt2live turt2live commented Jan 11, 2025

Copy link
Copy Markdown
Member

Rendered

Disclosure: I am Director of Standards Development at The Matrix.org Foundation C.I.C., Matrix Spec Core Team (SCT) member, employed by Element, and operate the t2bot.io service. This proposal is written and published as a Trust & Safety team member allocated in full to the Foundation.

Fixes matrix-org/matrix-spec#1949

@turt2live turt2live changed the title MSC: Authenticated media v2 (Cookie authentication for Client-Server API) MSC4250: Authenticated media v2 (Cookie authentication for Client-Server API) Jan 11, 2025
@turt2live
turt2live marked this pull request as ready for review January 11, 2025 05:23
@turt2live turt2live added proposal A matrix spec change proposal. Process state. A-Client Server Client-Server API kind:core MSC which is critical to the protocol's success needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. labels Jan 11, 2025

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation requirements:

  • Client
  • Server
  • Evidence that this actually works in Firefox private browsing mode and other similar environments

[Service Workers](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API) are unavailable,
leaving the client two options:

1. Buffer *all* media into a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob), like they

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another alternative: Stream the image via plain old fetch into OPFS and then load it from there. OPFS is not always available in private tabs. In that case the media can be streamed into IndexedDb too. That's what Trixnity does.

-> 401 M_MISSING_TOKEN
```

## Potential issues

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How well does this with with CDNs? (especially in comparison with the Auth header approach). As I assume this is the main reason that S3 & Discord etc use timed/hashed query params...

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should have zero impact because we still hit the homeserver before redirection.

affected users a chance at seeing media again. This proposal is heavily inspired by
[issue #1949](https://github.com/matrix-org/matrix-spec/issues/1949) which explores some potential
options in this area, and puts forward [Cookies](https://en.wikipedia.org/wiki/HTTP_cookie) as the
best way to solve the issue. This is an opt-in authentication mechanism for specific Client-Server API

@dbkr dbkr Jan 13, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it was more siding with timed URLs, at least as far as my reasoning went (although this is great as an MSC for the cookie auth option regardless: I probably ought to write up an MSC for the timed auth option).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"this" is meant to be the MSC rather than issue - will clarify

Comment on lines +56 to +58
Servers SHOULD note that some browsers and cookie jar implementations may restore expired cookies, and
SHOULD therefore check expiration against an internal database rather than rely on the client-supplied
value.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not quite sure how questionable cookie jar impls are relevant here: isn't rejecting expired cookies a fundamental security requirement for the server? Or maybe I've misunderstood what this is trying to say.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was a weird thing for the MDN page to say in a brief scroll, so carried here as a recommendation.

Comment on lines +45 to +46
calling [`/sync`](https://spec.matrix.org/v1.13/client-server-api/#get_matrixclientv3sync) or
[`/whoami`](https://spec.matrix.org/v1.13/client-server-api/#get_matrixclientv3accountwhoami) (for

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I was coming down on the side of a dedicated 'cookie pls' endpoint rather than dual-purposing sync or whoami, since the only benefit would be to save a few requests by tacking it onto sync requests, whereas you would lose precise control on when the cookie got refreshed and add interactions between media and sync that aren't really necessary. For whoami I really don't see any benefit to dual-purposing.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A benefit of dual purpose is the client doesn't have to care about the cookie at all: it'll get appended by their http client automatically, and the server can decide when to override it. This also allows a server to set HttpOnly if it wants.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Client Server Client-Server API kind:core MSC which is critical to the protocol's success needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. proposal A matrix spec change proposal. Process state.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Authenticated Media v2

4 participants