Skip to Content
MuoCeon Docs
Third-party OAuth IntegrationReference

Endpoints

All external endpoints with authentication, caching constraints and purpose.

Convention: {issuer} looks like https://id.example.com/v1/oauth, {origin} is its origin, and {consentUi} is the consent UI address (read from the metadata's authorization_endpoint).

Endpoints third parties use

MethodAddressAuthCachePurpose
GET{consentUi}/authorizeNone (relies on the user's session)No cacheAuthorization entry point, the browser redirect target
POST{issuer}/tokenClient authenticationno-storeExchange, refresh, client credentials
POST{issuer}/revokeClient authenticationno-storeRevoke tokens
POST{issuer}/introspectConfidential clients onlyno-storeQuery whether a token is active
GET{issuer}/jwksNone5 minutesToken signing public keys
GET{origin}/v1/auth/userinfoUser access token (auth audience)No cacheRead user identity

introspect is not open to public clients: it amounts to "hand the server any token and ask if it is still valid", so opening it up would let anyone holding a leaked token confirm its usability for free.

Internal endpoints (do not call from third parties)

MethodAddressNotes
POST{issuer}/preauthorizeConsent UI pre-validation: validates the client and redirect URI, returns display material and a consent_ticket (30-minute lifetime)
POST{issuer}/authorizeConsent UI submits the decision: consumes the ticket and the identity assertion, returns the redirect location as JSON (not a 302)

Both accept POST + JSON only, and exist for MuoCeon's own consent UI. Standard clients following RFC 6749 with GET receive 405 — which is exactly why the metadata's authorization_endpoint points at the consent UI rather than at these endpoints.

Account self-management endpoints (first-party)

MethodAddressAuth and scopeNotes
GET{issuer}/grantsoauth audience + oauth:grants:readPaginated list of authorized applications; filter with kind=first_party|third_party
DELETE{issuer}/grants/:clientIdoauth audience + oauth:grants:revokeWith did, revokes only that device; without it, all sessions for that client. Requires recent authentication (max_age=300)

Discovery endpoints

AddressSpecification
{origin}/.well-known/oauth-authorization-server/v1/oauthRFC 8414
{origin}/.well-known/openid-configuration/v1/oauthRFC 8414 path form
{issuer}/.well-known/openid-configurationOIDC Discovery
{origin}/.well-known/oauth-protected-resource/v1/authRFC 9728
{origin}/.well-known/oauth-protected-resource/v1/oauthRFC 9728
{origin}/.well-known/oauth-protected-resource/v1/accountRFC 9728

General constraints

  • Every endpoint is rate limited independently; exceeding a limit returns 429 with a Retry-After header.
  • Errors from the token-related endpoints (token / revoke / introspect) follow RFC 6749 §5.2 — see Error codes.
  • The revocation endpoint returns 200 for tokens that do not exist, so it cannot be used as a token oracle.

On this page