Robine ID

Robine ID documentation

Build your OpenID Connect integration with confidence.

Robine ID is a file-configured OpenID Provider for trusted operators. It supports the Authorization Code flow, PKCE, signed ID tokens, UserInfo, logout, and hot-reloaded relying-application configuration.

OpenID ConnectOAuth 2.0PKCE S256RS256
01

Start here

Quick start

Begin with the discovery document. It is the canonical source for issuer metadata, endpoints, supported scopes, signing algorithms, and client authentication methods.

Provider discovery
GET /default/.well-known/openid-configuration
Issuer matching is exact. Use the issuer URL returned by discovery without removing its path segment.
02

Relying parties

Register an application

Store one JSON document per application in the configured applications directory. Changes are validated and activated atomically; an invalid edit leaves the last valid revision running.

applications/example.json
{
  "schema_version": 1,
  "kind": "oidc_application",
  "id": "example",
  "name": "Example application",
  "type": "public",
  "redirect_uris": ["https://app.example.com/oidc/callback"],
  "scopes": ["openid", "profile", "email"],
  "grant_types": ["authorization_code"],
  "authentication_method": "none",
  "pkce_required": true,
  "nonce_required": true
}

Confidential applications may use client_secret_basic or client_secret_post. A secret can be a literal string or an environment reference. Keep examples separate from production application files.

03

Protocol

Authorization Code with PKCE

  1. 1
    Create a verifier

    Generate a high-entropy code verifier and derive its S256 challenge.

  2. 2
    Send the browser to authorize

    Include client ID, exact redirect URI, scope, state, nonce, and the PKCE challenge.

  3. 3
    Exchange the code

    POST the short-lived code and original verifier to the token endpoint.

  4. 4
    Validate the ID token

    Verify its RS256 signature through JWKS, then issuer, audience, expiry, and nonce.

Authorization request
GET /default/authorize
  ?response_type=code
  &client_id=example
  &redirect_uri=https%3A%2F%2Fapp.example.com%2Foidc%2Fcallback
  &scope=openid%20profile%20email
  &state=opaque-client-state
  &nonce=unique-login-nonce
  &code_challenge=BASE64URL_SHA256_VERIFIER
  &code_challenge_method=S256
04

Desired state

Configuration

Root configuration

Defines issuers, identities, claims, branding, authentication policy, storage, and telemetry.

ROBINE_ID_CONFIG

Application directory

Contains independently managed relying-application documents and reloads automatically.

ROBINE_ID_APPLICATIONS_DIR

Secret handling

Literal strings work directly. Environment references keep deployment secrets outside Git.

SECRET_KEY_BASE

Safe activation

The complete candidate is validated before a new fingerprint becomes active.

mix robine_id.config.validate
05

Production

Operate the provider

EndpointPurpose
/health/liveProcess liveness
/health/readyConfiguration and database readiness
/default/jwks.jsonPublic token-verification keys
/default/userinfoClaims for a valid bearer access token
Back up keys and encryption material together. The signing-key file cannot be recovered without its matching SECRET_KEY_BASE.
06

Be explicit

MVP boundaries

The MVP is single-instance. Authorization codes, access-token grants, rate-limit counters, and authenticated-session registrations are held in memory and are invalidated by a restart.

Dynamic client registration, refresh tokens, MFA, federation, account recovery, token introspection, token revocation, distributed stores, and high availability are outside the MVP.