mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 12:37:00 +01:00
Add example Outline config (#3076)
This commit is contained in:
parent
cc662f184a
commit
c904af2966
|
@ -449,6 +449,147 @@ php occ config:app:set --value=0 user_oidc allow_multiple_user_backends
|
|||
You can login directly by appending `?direct=1` to your login page. You can re-enable other backends
|
||||
by setting the value to `1`
|
||||
|
||||
## Outline
|
||||
|
||||
> These instructions were tested with self-hosted Outline 0.80.2.
|
||||
|
||||
Outline is a wiki / knowledge base which [can be self-hosted][outline-self].
|
||||
|
||||
Self-hosted [Outline supports authentication with OpenID Connect][outline-oidc],
|
||||
with some limitations:
|
||||
|
||||
* [Outline does not support PKCE][outline-pkce],
|
||||
[which is a security issue][pkce-disable-security].
|
||||
|
||||
* Outline does not support group or ACL delegation.
|
||||
|
||||
On a new Outline installation, the first user who authenticates to Outline
|
||||
will be granted administrative rights.
|
||||
|
||||
* Outline *only* automatically updates the user's email address on log in.
|
||||
|
||||
It will set the user's preferred name on *first* log in *only*.
|
||||
|
||||
To set up a *new* self-hosted Outline instance to authenicate with Kanidm:
|
||||
|
||||
1. Add an email address to your regular Kanidm account, if it doesn't have one
|
||||
already:
|
||||
|
||||
```sh
|
||||
kanidm person update your_username -m your_username@example.com
|
||||
```
|
||||
|
||||
2. Create a new Kanidm group for your Outline users (`outline_users`), and
|
||||
**only** add your regular account to it:
|
||||
|
||||
```sh
|
||||
kanidm group create outline
|
||||
kanidm group add-members outline_users your_username
|
||||
```
|
||||
|
||||
**Warning:** don't add any other users when first setting up Outline. The
|
||||
first user who logs in will gain administrative rights.
|
||||
|
||||
3. Create a new OAuth2 application configuration in Kanidm (`outline`),
|
||||
disable the PKCE requirement ([this is insecure][pkce-disable-security], but
|
||||
[Outline doesn't support it][outline-pkce]), configure the redirect URL, and
|
||||
scope access to the `outline_users` group:
|
||||
|
||||
```sh
|
||||
kanidm system oauth2 create outline Outline https://outline.example.com
|
||||
kanidm system oauth2 warning-insecure-client-disable-pkce outline
|
||||
kanidm system oauth2 add-redirect-url outline https://outline.example.com/auth/oidc.callback
|
||||
kanidm system oauth2 update-scope-map outline outline_users email openid profile groups
|
||||
```
|
||||
|
||||
4. Get the `outline` OAuth2 client secret from Kanidm:
|
||||
|
||||
```sh
|
||||
kanidm system oauth2 show-basic-secret outline
|
||||
```
|
||||
|
||||
5. Configure Outline to authenticate to Kanidm with OpenID Connect in
|
||||
Outline's environment file (`docker.env` / `.env`):
|
||||
|
||||
```
|
||||
OIDC_CLIENT_ID=outline
|
||||
OIDC_CLIENT_SECRET=YOUR KANIDM BASIC SECRET HERE
|
||||
OIDC_AUTH_URI=https://kanidm.example.com/ui/oauth2
|
||||
OIDC_TOKEN_URI=https://kanidm.example.com/oauth2/token
|
||||
OIDC_USERINFO_URI=https://kanidm.example.com/oauth2/openid/outline/userinfo
|
||||
OIDC_LOGOUT_URI=
|
||||
# Prevent redirect loop on logout
|
||||
OIDC_DISABLE_REDIRECT=true
|
||||
# Outline doesn't seem to actually use this.
|
||||
OIDC_USERNAME_CLAIM=preferred_username
|
||||
OIDC_DISPLAY_NAME=Kanidm
|
||||
OIDC_SCOPES=openid profile email
|
||||
```
|
||||
|
||||
6. Restart Outline and wait for it to come back up again.
|
||||
|
||||
Outline's login form should now show a <kbd>Continue with Kanidm</kbd> button,
|
||||
which can be used to sign in.
|
||||
|
||||
### Migrating between Outline authentication providers
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> While Outline supports multiple authentication providers, we'd recommend
|
||||
> running Outline with a *single* authentication provider (once you've tested
|
||||
> it works correctly).
|
||||
>
|
||||
> When *migrating* from one authentication provider to another, Outline will
|
||||
> attempt to match based on email address. This can be vulnerable to account
|
||||
> take-over if email addresses are *not* validated in *all* providers and
|
||||
> Outline is configured with multiple authentication providers.
|
||||
|
||||
Each Outline user only has a single credential associated with it (provider +
|
||||
`sub`), even if Outline is configured to use multiple identity providers. This
|
||||
is set to the last-used credential on login (detailed below).
|
||||
|
||||
When using Kanidm, `sub` is the user's UUID, and is stable even if their Kanidm
|
||||
account is renamed or changes email address – but Outline will only update the
|
||||
email address automatically.
|
||||
|
||||
When a user authenticates to Outline, it will attempt to match the credential
|
||||
with an Outline user:
|
||||
|
||||
1. Find a matching user by credential (provider + `sub`).
|
||||
|
||||
2. If there is a matching user, the user is logged in.
|
||||
|
||||
3. Find a matching user by email address.
|
||||
|
||||
4. If there's no matching Outline user with that email address, Outline will
|
||||
create a new user account (if allowed by <kbd>Security</kbd> →
|
||||
<kbd>Access</kbd> → <kbd>Allowed domains</kbd>), and the user is logged in.
|
||||
|
||||
If a user account is not allowed to be created, the login will be rejected.
|
||||
|
||||
5. If the matching user's credential *is* associated with *this* provider,
|
||||
[Outline will (currently) reject the login attempt](https://github.com/outline/outline/blob/ce987d23edbb7be940d26e2cc7df8c1e51aabc3c/server/commands/userProvisioner.ts#L86-L94).
|
||||
|
||||
6. At this point, the matching user's credential must be associated with a
|
||||
different provider, and it is treated as a migration.
|
||||
|
||||
Outline replaces the matching user's credential with the one currently used,
|
||||
and logs them in.
|
||||
|
||||
As long as all email addresses are verified *and* unique to a single account in
|
||||
each provider, this should allow you to easily and securely migrate from one
|
||||
identity provider to another.
|
||||
|
||||
However, if emails are not verified in even a *single* provider, this could make
|
||||
Outline vulnerable to account take-over.
|
||||
|
||||
Outline has *no UI* for managing or displaying external credentials, so it's
|
||||
difficult to troubleshoot.
|
||||
|
||||
[outline-oidc]: https://docs.getoutline.com/s/hosting/doc/oidc-8CPBm6uC0I
|
||||
[outline-pkce]: https://github.com/outline/outline/discussions/7706
|
||||
[outline-self]: https://docs.getoutline.com/s/hosting
|
||||
|
||||
## ownCloud
|
||||
|
||||
> These instructions were tested with ownCloud 10.15.10.
|
||||
|
|
Loading…
Reference in a new issue