···130130131131Now you can sign in to IndieAuth-compatible sites using `https://your-domain.com/` as your identity.
132132133133+### Using as an OpenID Connect (OIDC) Provider
134134+135135+Indiko also supports OpenID Connect (OIDC) for modern authentication flows:
136136+137137+**Discovery endpoint:**
138138+```
139139+https://your-indiko-domain.com/.well-known/openid-configuration
140140+```
141141+142142+**Key features:**
143143+- Authorization Code Flow with PKCE
144144+- ID Token with RS256 signing
145145+- JWKS endpoint for token verification
146146+- Support for `openid`, `profile`, and `email` scopes
147147+- Userinfo endpoint for retrieving user claims
148148+149149+Test your OIDC setup using the [OIDC Debugger](https://oidcdebugger.com/).
150150+133151## API Reference
134152135135-### OAuth 2.0 Endpoints
153153+### OAuth 2.0 / OpenID Connect Endpoints
136154137137-- `GET /auth/authorize` - Authorization endpoint
138138-- `POST /auth/token` - Token exchange endpoint
155155+- `GET /auth/authorize` - Authorization endpoint (OAuth 2.0 / OIDC)
156156+- `POST /auth/token` - Token exchange endpoint (returns access token and ID token for OIDC)
157157+- `GET /userinfo` - OIDC userinfo endpoint (returns user claims)
158158+- `GET /.well-known/openid-configuration` - OIDC discovery document
159159+- `GET /jwks` - JSON Web Key Set for ID token verification
139160- `POST /auth/logout` - Session logout
140161141162### User Profile
+76-1
src/html/docs.html
···577577 <h3>table of contents</h3>
578578 <ul>
579579 <li><a href="#overview">overview</a></li>
580580+ <li><a href="#oidc">openid connect (oidc)</a></li>
580581 <li><a href="#getting-started">getting started</a></li>
581582 <li><a href="#button">sign in button</a></li>
582583 <li><a href="#endpoints">endpoints</a></li>
···612613 <ul>
613614 <li>Passwordless authentication via WebAuthn passkeys</li>
614615 <li>Full IndieAuth and OAuth 2.0 support with PKCE</li>
616616+ <li>OpenID Connect (OIDC) support with ID tokens</li>
615617 <li>Access tokens and refresh tokens for API access</li>
616618 <li>Token introspection and revocation endpoints</li>
617619 <li>UserInfo endpoint for profile data</li>
···621623 <li>User profile endpoints with h-card microformats</li>
622624 <li>Invite-based user registration</li>
623625 </ul>
626626+ </section>
627627+628628+ <section id="oidc" class="section">
629629+ <h2>openid connect (oidc)</h2>
630630+ <p>
631631+ Indiko supports OpenID Connect (OIDC) for modern authentication flows, enabling "Sign in with Indiko" for any OIDC-compatible application.
632632+ </p>
633633+634634+ <h3>oidc endpoints</h3>
635635+ <table>
636636+ <thead>
637637+ <tr>
638638+ <th>Endpoint</th>
639639+ <th>Description</th>
640640+ </tr>
641641+ </thead>
642642+ <tbody>
643643+ <tr>
644644+ <td><code>/.well-known/openid-configuration</code></td>
645645+ <td>OIDC discovery document</td>
646646+ </tr>
647647+ <tr>
648648+ <td><code>/jwks</code></td>
649649+ <td>JSON Web Key Set for ID token verification</td>
650650+ </tr>
651651+ <tr>
652652+ <td><code>/auth/authorize</code></td>
653653+ <td>Authorization endpoint (same as OAuth 2.0)</td>
654654+ </tr>
655655+ <tr>
656656+ <td><code>/auth/token</code></td>
657657+ <td>Token endpoint (returns ID token when <code>openid</code> scope requested)</td>
658658+ </tr>
659659+ <tr>
660660+ <td><code>/userinfo</code></td>
661661+ <td>OIDC userinfo endpoint</td>
662662+ </tr>
663663+ </tbody>
664664+ </table>
665665+666666+ <h3>key features</h3>
667667+ <ul>
668668+ <li>Authorization Code Flow with PKCE</li>
669669+ <li>ID Token with RS256 signing</li>
670670+ <li>Support for <code>openid</code>, <code>profile</code>, and <code>email</code> scopes</li>
671671+ <li>Automatic key generation and management</li>
672672+ <li>Standards-compliant discovery document</li>
673673+ </ul>
674674+675675+ <h3>id token claims</h3>
676676+ <p>
677677+ When the <code>openid</code> scope is requested, the token endpoint returns an ID token (JWT) containing:
678678+ </p>
679679+ <ul>
680680+ <li><code>iss</code> - Issuer (Indiko server URL)</li>
681681+ <li><code>sub</code> - Subject (user identifier)</li>
682682+ <li><code>aud</code> - Audience (client ID)</li>
683683+ <li><code>exp</code> - Expiration time</li>
684684+ <li><code>iat</code> - Issued at time</li>
685685+ <li><code>auth_time</code> - Authentication time</li>
686686+ <li><code>nonce</code> - Nonce (if provided in authorization request)</li>
687687+ <li><code>name</code>, <code>email</code>, <code>picture</code>, <code>website</code> - User claims (based on granted scopes)</li>
688688+ </ul>
689689+690690+ <div class="info-box">
691691+ <strong>Testing:</strong>
692692+ You can test your OIDC setup using the <a href="https://oidcdebugger.com/" target="_blank" rel="noopener noreferrer">OIDC Debugger</a>. Set the discovery endpoint and use PKCE with SHA-256.
693693+ </div>
624694 </section>
625695626696 <section id="getting-started" class="section">
···10321102 </thead>
10331103 <tbody>
10341104 <tr>
11051105+ <td><code>openid</code></td>
11061106+ <td>OpenID Connect authentication</td>
11071107+ <td>Triggers ID token issuance (OIDC only)</td>
11081108+ </tr>
11091109+ <tr>
10351110 <td><code>profile</code></td>
10361111 <td>Basic profile information</td>
10371112 <td>name, photo, URL</td>
···1046112110471122 <div class="info-box">
10481123 <strong>Note:</strong>
10491049- Users can selectively approve scopes during authorization. Your app may receive fewer scopes than requested.
11241124+ Users can selectively approve scopes during authorization. Your app may receive fewer scopes than requested. The <code>openid</code> scope is only relevant for OIDC flows and enables ID token issuance.
10501125 </div>
10511126 </section>
10521127