···11# Indiko
2233-
33+
4455No that was not a typo the project's name actually is `indiko`! This is a small implementation of [IndieAuth](https://indieweb.org/How_to_set_up_web_sign-in_on_your_own_domain) running on bun with sqlite and serving as the authentication provider for my homelab / side projects it also supports custom clients with roles over the OAuth 2.0 spec.
66···7979#### Auto-registered Clients (IndieAuth)
80808181Any app can use Indiko without admin approval. On first authorization:
8282+8283- Use any valid URL as your `client_id` (e.g., `https://myapp.example.com`)
8384- Indiko fetches metadata from your `client_id` URL
8485- App is automatically registered
···95961. Go to `/admin/clients`
96972. Click "Create OAuth Client"
97983. Fill in:
9999+98100 - **Name** - Display name for your app
99101 - **Logo URL** - (Optional) URL to app logo
100102 - **Description** - (Optional) Brief description
···103105 - **Default Role** - (Optional) Auto-assign this role on first auth
1041061051074. Save and copy the generated credentials:
108108+106109 - **Client ID** - Format: `ikc_xxxxxxxxxxxxxxxxxxxxx`
107110 - **Client Secret** - Format: `iks_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
108111···110113 > The client secret is only shown once! Save it securely.
111114112115**Pre-registered clients:**
116116+113117- **MUST use both PKCE and client_secret** in token requests
114118- Support role assignment for RBAC (Role-Based Access Control)
115119- Admin-managed metadata and permissions
···135139Indiko also supports OpenID Connect (OIDC) for modern authentication flows:
136140137141**Discovery endpoint:**
142142+138143```
139144https://your-indiko-domain.com/.well-known/openid-configuration
140145```
141146142147**Key features:**
148148+143149- Authorization Code Flow with PKCE
144150- ID Token with RS256 signing
145151- JWKS endpoint for token verification