OAuth: "Add to Missived" and "Sign in with Missived"

Missived is an OAuth 2.1 and OpenID Connect provider. Other services can use it two ways:

Register your app

Any org can make an app under Org Settings → Integrations → Apps & bots and open its OAuth panel:

The client id is the app id. Until the platform approves your app, only members of the org that made it can connect it, which is your test loop. To open it to every org, get it listed in the app gallery.

Endpoints

Discovery is at https://api.missived.com/oauth/.well-known/openid-configuration (also /.well-known/oauth-authorization-server). The issuer is https://api.missived.com/oauth.

Endpoint Path
Authorization /oauth/auth
Token /oauth/token
Revocation /oauth/token/revocation
Introspection /oauth/token/introspection
UserInfo /oauth/me
Keys /oauth/jwks
Pushed authorization requests /oauth/request

The flow

Authorization code with PKCE (S256), required of every client. There is no implicit, password or client-credentials grant, and no dynamic registration. Authorization responses carry iss.

  1. Send the person to /oauth/auth with response_type=code, client_id, redirect_uri, scope, state, code_challenge and code_challenge_method=S256.
  2. They sign in to Missived (if they aren't already) and see a consent screen: your app, who made it, what it will be able to do, and, for an install, which org.
  3. Missived redirects back with code and state (or error).
  4. Exchange the code at /oauth/token with the code_verifier. A confidential client authenticates with its secret, in the body or with HTTP Basic.

Scopes decide which of the two you get:

You may pass resource=https://api.missived.com/v1 to bind the tokens to the API.

Tokens

For org admins

Errors reach your redirect URI (error, error_description, state) when the request is valid enough to know where to send them; otherwise Missived shows an error page.