Skip to content
Open
66 changes: 66 additions & 0 deletions proposals/4191-account-deeplink.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# MSC4191: Account management deep-linking

This proposal is part of the broader [MSC3861: Next-generation auth for Matrix, based on OAuth 2.0/OIDC](https://github.com/matrix-org/matrix-spec-proposals/pull/3861).

With the move to the next-generation auth, the homeserver no longer provide dedicated endpoints to perform account management actions.
This proposal introduce a way to deep-link to the account management capabilities of the homeserver.

## Proposal

### Additional authentication server metadata

This proposal introduces two new fields in the authentication server metadata:

- `account_management_uri`: the URL where the user is able to access the account management capabilities of the authentication server
- `account_management_actions_supported`: a JSON array of actions that the account management URL supports

Note that the intent of this proposal is to potentially end up in a OpenID Connect specification, or at least formally registered in the [IANA Registry for Server Metadata](https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#authorization-server-metadata).
This is why the metadata fields are not prefixed with `org.matrix.`, but the actions themselves are.

### Possible actions

The following actions are defined by this MSC:

- `org.matrix.profile` - The user wishes to view their profile (name, avatar, contact details).
- `org.matrix.sessions_list` - The user wishes to view a list of their sessions.
- `org.matrix.session_view` - The user wishes to view the details of a specific session.
- `org.matrix.session_end` - The user wishes to end/logout a specific session.
Copy link
Member

Choose a reason for hiding this comment

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

Why session and not device to match current terminology?

Copy link
Member

Choose a reason for hiding this comment

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

I believe the original rationale for this is that OAuth 2.0 refers to sessions, whereas devices is a Matrix concept.

@sandhose can you provide any other context on this?

Copy link
Member

Choose a reason for hiding this comment

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

@sandhose has said that originally these values didn't have a org.matrix prefix and it felt right to use the OAuth terminology of sessions.

However, now that these values are prefixed it does seem entirely reasonable to revisit them and give them names that make sense for Matrix.

How about:

  • org.matrix.devices_list
  • org.matrix.device_view
  • org.matrix.device_delete (delete doesn't feel quite right, but I can't think of anything better right now)

Given that these are just value renames rather than anything semantic, could they be adjusted later in the spec process rather than requiring the implementations to be updated prior to FCP?

Copy link
Member

Choose a reason for hiding this comment

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

That would be fine, yes.

Copy link
Member

@hughns hughns Sep 29, 2025

Choose a reason for hiding this comment

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

I've updated the values in 9e1fbf5 and left this thread unresolved to reflect that the implementation in MAS is using the non-stable values.

- `org.matrix.account_deactivate` - The user wishes to deactivate their account.
- `org.matrix.cross_signing_reset` - The user wishes to reset their cross-signing keys.

Subsequent MSCs may extend this list.

### Account management URL parameters

The account management URL may accept the following additional query parameters:

- `id_token_hint` - An ID Token that was previously issued to the client; the issuer uses it as a hint for which user is requesting to manage their account.
If the requesting user is not logged in then it is used as a login hint; if a different user/identity is already logged in then warn the user that they are accessing a different account.
- `action` - Can be used to indicate the action that the user wishes to take, as defined above.
- `device_id` - This can be used to identify a particular session for `session_view` and `session_end`. This is the Matrix device ID.

For example, if a user wishes to sign out a session for the device `ABCDEFGH` where the advertised account management URL was `https://account.example.com/myaccount` the client could open a link to `https://account.example.com/myaccount?action=org.matrix.session_end&device_id=ABCDEFGH`.

Not all actions need to be supported by the account management URL, and the client should only use the actions advertised in the `account_management

## Alternatives

### Keep the current capabilities

XXX

### Advertise the account management capabilities in the well-known discovery

XXX

### Advertise the account management capabilities in a C-S API endpoint

XXX

## Security considerations

TBD

## Unstable prefixes

TBD