diff --git a/installation.mdx b/installation.mdx index d814fd2..48e9416 100644 --- a/installation.mdx +++ b/installation.mdx @@ -330,6 +330,90 @@ cat dev-cert.key.pem | base64 > key_base64.txt **⚠️ Warning**: Self-signed certificates are for development only. Never use them in production! +## OIDC SSO Configuration + +Notifuse supports **OpenID Connect (OIDC) Single Sign-On** so your team can authenticate through an external Identity Provider (IdP) such as Keycloak, Okta, Auth0, Azure AD, or Google Workspace. + +When OIDC is enabled, a **Sign in with SSO** button appears on the login page. Users who authenticate through the IdP are automatically matched (or provisioned) in Notifuse by email address. + +### Environment Variables + +| Variable | Description | Default | +| --- | --- | --- | +| `OIDC_ENABLED` | Enable OIDC SSO (`true` or `false`) | `false` | +| `OIDC_ISSUER_URL` | IdP issuer URL (e.g., `https://keycloak.example.com/realms/myorg`) | - | +| `OIDC_CLIENT_ID` | OAuth2 client ID registered with your IdP | - | +| `OIDC_CLIENT_SECRET` | OAuth2 client secret (stored encrypted with `SECRET_KEY`) | - | +| `OIDC_AUTO_PROVISION` | Automatically create Notifuse accounts for new IdP users (`true` or `false`) | `false` | +| `OIDC_ALLOW_MAGIC_CODE` | Allow magic code (email) login alongside SSO (`true` or `false`) | `true` | +| `OIDC_GROUPS_CLAIM` | ID token claim name containing user groups | `groups` | + + + `OIDC_CLIENT_SECRET` is encrypted at rest using your `SECRET_KEY`. Never change your `SECRET_KEY` after + configuring OIDC, or the client secret will become unreadable. + + +### Minimal Setup + +Add these environment variables to your `.env` file or `compose.yaml`: + +```bash +OIDC_ENABLED=true +OIDC_ISSUER_URL=https://your-idp.example.com/realms/your-realm +OIDC_CLIENT_ID=notifuse +OIDC_CLIENT_SECRET=your-client-secret +``` + +Then configure a redirect URI in your IdP: + +``` +https://your-notifuse-instance.com/api/auth/oidc/callback +``` + +### IdP Configuration + +Your Identity Provider needs to be configured with: + +1. **Client type**: Confidential (server-side) +2. **Redirect URI**: `https:///api/auth/oidc/callback` +3. **Scopes**: `openid email profile` (add `groups` if using group mappings) +4. **Grant type**: Authorization Code + +### Auto-Provisioning + +When `OIDC_AUTO_PROVISION=true`, users who don't have a Notifuse account are automatically created on first SSO login. Their name and email are populated from the ID token claims (`email`, `name`, `preferred_username`). + +When disabled (default), only users who already have a Notifuse account matching the IdP email can log in via SSO. + +### Group-Based Permissions + +Notifuse can synchronize workspace roles and permissions from IdP group claims. This is configured through the `oidc_group_mappings` key in the system settings database table (JSON array). + +Each mapping specifies: + +- **`oidc_group`** — The group name from the IdP +- **`role`** — Notifuse role: `owner` or `member` +- **`all_workspaces`** — Whether the user is added to all workspaces +- **`permissions`** — Granular Notifuse permissions object + +If your IdP uses a non-standard claim name for groups (e.g., `roles` or `memberOf`), set `OIDC_GROUPS_CLAIM` to the correct claim name. + +### Enforcing SSO-Only Login + +To require all users to log in through your IdP and disable magic code (email) authentication: + +```bash +OIDC_ENABLED=true +OIDC_ALLOW_MAGIC_CODE=false +``` + +When `OIDC_ALLOW_MAGIC_CODE=false`, the `/api/user.signin` and `/api/user.verify` endpoints return `403 Forbidden`, and the magic code login form is hidden in the UI. + + + The root administrator can always authenticate using [Programmatic Authentication](#programmatic-authentication) + regardless of OIDC settings, ensuring you never lose access to your instance. + + ## Configuration Management **Setup Wizard vs Environment Variables**