mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-18 17:25:16 -04:00
docs: restructure
This commit is contained in:
parent
91ebd519a8
commit
70a6583fe0
69 changed files with 471 additions and 385 deletions
56
docs/content/config/auth/index.md
Normal file
56
docs/content/config/auth/index.md
Normal file
|
@ -0,0 +1,56 @@
|
|||
# Authentication
|
||||
|
||||
HedgeDoc supports multiple authentication mechanisms that can be enabled and configured.
|
||||
An authentication method is always linked to an account on the HedgeDoc instance.
|
||||
However, an account can also have multiple authentication methods linked.
|
||||
|
||||
Each user has a unique username.
|
||||
By this username, other users can invite them to their notes.
|
||||
|
||||
When first logging in with a new authentication method, a new account will be created.
|
||||
If a user already has an account, they can link a new authentication method in their settings.
|
||||
|
||||
## Supported authentication methods
|
||||
|
||||
- [Username and password (Local account)](./local.md)
|
||||
- [LDAP](./ldap.md)
|
||||
- [OpenID Connect (OIDC)](./oidc.md)
|
||||
|
||||
While HedgeDoc provides a basic local account system, we recommend using an external
|
||||
authentication mechanism for most environments.
|
||||
|
||||
For LDAP and OIDC you can configure multiple auth providers of that type.
|
||||
You need to give each of them a unique identifier that is used in the configuration
|
||||
and in the database.
|
||||
The identifier should consist of only letters (`a-z`, `A-Z`), numbers (`0-9`), and dashes (`-`).
|
||||
|
||||
## Profile sync
|
||||
|
||||
A HedgeDoc account stores generic profile information like the display name of the
|
||||
user and optionally a URL to a profile picture.
|
||||
Depending on your configuration, users can change this information in their settings.
|
||||
You can also configure HedgeDoc to sync this information from an external source like
|
||||
LDAP or OIDC. In this case, changes made by the user will be overridden on login with
|
||||
the external source, that is configured as sync source.
|
||||
|
||||
## Account merging
|
||||
|
||||
There's no built-in account merging in HedgeDoc. So if you registered with different
|
||||
auth methods, you will have different accounts.
|
||||
To manually resolve this situation, you can do the following:
|
||||
|
||||
1. Log in with the second account (this should be merged into the first one).
|
||||
2. Visit every note, you own on that account and change the note ownership to your first account.
|
||||
3. Ensure, there's nothing left anymore. Then delete the second account.
|
||||
4. Log in with the first account.
|
||||
5. Link the auth method of the former second account to your account in the settings.
|
||||
|
||||
## Common configuration
|
||||
|
||||
| environment variable | default | example | description |
|
||||
|---------------------------------|-----------|---------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `HD_SESSION_SECRET` | (not set) | `5aaea9250828ce6942b35d170a385e74c41f1f05`, just random data | **Required.** The secret used to sign the session cookie. |
|
||||
| `HD_SESSION_LIFETIME` | `1209600` | `604800`, `1209600` | The lifetime of a session in seconds. After this time without activity, a user will be logged out. |
|
||||
| `HD_AUTH_ALLOW_PROFILE_EDITS` | `true` | `true`, `false` | Allow users to edit their profile information. |
|
||||
| `HD_AUTH_ALLOW_CHOOSE_USERNAME` | `true` | `true`, `false` | If enabled, users may freely choose their username when signing-up via an external auth source (OIDC). Otherwise the username from the external auth source is taken. |
|
||||
| `HD_AUTH_SYNC_SOURCE` | (not set) | `gitlab`, if there's an auth method (LDAP or OIDC) with the identifier `gitlab` | If enabled, the auth method with the configured identifier will update user's profile information on login. |
|
27
docs/content/config/auth/ldap.md
Normal file
27
docs/content/config/auth/ldap.md
Normal file
|
@ -0,0 +1,27 @@
|
|||
# LDAP
|
||||
|
||||
HedgeDoc can use one or multiple LDAP servers to authenticate users. To do this, you
|
||||
first need to tell HedgeDoc identifiers for the servers you want to use (`HD_AUTH_LDAP_SERVERS`).
|
||||
Then you need to provide the configuration for these LDAP servers
|
||||
depending on how you want to use them.
|
||||
|
||||
Each of these variables will contain the identifier for the LDAP server.
|
||||
For example, if you chose the identifier `MYLDAP` for your LDAP server, all variables
|
||||
for this server will start with `HD_AUTH_LDAP_MYLDAP_`.
|
||||
|
||||
Replace `$NAME` with the identifier of the LDAP server in the table below accordingly.
|
||||
|
||||
| environment variable | default | example | description |
|
||||
|--------------------------------------------|----------------------|----------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
|
||||
| `HD_AUTH_LDAP_SERVERS` | - | `MYLDAP` | A comma-seperated list of names of LDAP servers HedgeDoc should use. |
|
||||
| `HD_AUTH_LDAP_$NAME_PROVIDER_NAME` | `LDAP` | `My LDAP` | The display name for the LDAP server, that is shown in the UI of HegdeDoc. |
|
||||
| `HD_AUTH_LDAP_$NAME_URL` | - | `ldaps://ldap.example.com` | The url with which the LDAP server can be accessed. |
|
||||
| `HD_AUTH_LDAP_$NAME_SEARCH_BASE` | - | `ou=users,dc=LDAP,dc=example,dc=com` | The LDAP search base which contains the user accounts on the LDAP server. |
|
||||
| `HD_AUTH_LDAP_$NAME_SEARCH_FILTER` | `(uid={{username}})` | `(&(uid={{username}})(objectClass=inetOrgPerson))` | A LDAP search filter that filters the users that should have access. |
|
||||
| `HD_AUTH_LDAP_$NAME_SEARCH_ATTRIBUTES` | - | `username,cn` | A comma-seperated list of attributes that the search filter from the LDAP server should access. |
|
||||
| `HD_AUTH_LDAP_$NAME_USER_ID_FIELD` | `uid` | `uid`, `uidNumber`, `sAMAccountName` | The attribute of the user account which should be used as an id for the user. |
|
||||
| `HD_AUTH_LDAP_$NAME_DISPLAY_NAME_FIELD` | `displayName` | `displayName`, `name`, `cn` | The attribute of the user account which should be used as the display name for the user. |
|
||||
| `HD_AUTH_LDAP_$NAME_PROFILE_PICTURE_FIELD` | `jpegPhoto` | `jpegPhoto`, `thumbnailPhoto` | The attribute of the user account which should be used as the user image for the user. |
|
||||
| `HD_AUTH_LDAP_$NAME_BIND_DN` | - | `cn=admin,dc=LDAP,dc=example,dc=com` | The dn which is used to perform the user search. If this is omitted then HedgeDoc will use an anonymous bind. |
|
||||
| `HD_AUTH_LDAP_$NAME_BIND_CREDENTIALS` | - | `MyLdapPassword` | The credential to access the LDAP server. |
|
||||
| `HD_AUTH_LDAP_$NAME_TLS_CERT_PATHS` | - | `LDAP-ca.pem` | A comma-seperated list of paths to TLS certificates for the LDAP server. |
|
25
docs/content/config/auth/local.md
Normal file
25
docs/content/config/auth/local.md
Normal file
|
@ -0,0 +1,25 @@
|
|||
# Local
|
||||
|
||||
HedgeDoc provides local accounts, handled internally. This feature only provides basic
|
||||
functionality, so for most environments, we recommend using an external authentication mechanism,
|
||||
which also enables more secure authentication like 2FA or Passkeys.
|
||||
|
||||
| environment variable | default | example | description |
|
||||
|-------------------------------------------|---------|-------------------------|-----------------------------------------------------------------------------------------------------|
|
||||
| `HD_AUTH_LOCAL_ENABLE_LOGIN` | `false` | `true`, `false` | This makes it possible to use the local accounts in HedgeDoc. |
|
||||
| `HD_AUTH_LOCAL_ENABLE_REGISTER` | `false` | `true`, `false` | This makes it possible to register new local accounts in HedgeDoc. |
|
||||
| `HD_AUTH_LOCAL_MINIMAL_PASSWORD_STRENGTH` | `2` | `0`, `1`, `2`, `3`, `4` | The minimum password score, that passwords need to have. See the table below for more explanations. |
|
||||
|
||||
## Password score
|
||||
|
||||
The password score is calculated with [zxcvbn-ts][zxcvbn-ts-score].
|
||||
|
||||
| score | meaning | minimum number of guesses required (approximated) |
|
||||
|:-----:|-------------------------------------------------------------------|---------------------------------------------------|
|
||||
| 0 | All passwords with minimum 6 characters are allowed | - |
|
||||
| 1 | Only `too guessable` passwords are disallowed | 1.000 |
|
||||
| 2 | `too guessable` and `very guessable` passwords are disallowed | 1.000.000 |
|
||||
| 3 | `safely unguessable` and `very unguessable` passwords are allowed | 100.000.000 |
|
||||
| 4 | Only `very unguessable` passwords are allowed | 10.000.000.000 |
|
||||
|
||||
[zxcvbn-ts-score]: https://zxcvbn-ts.github.io/zxcvbn/guide/getting-started/#output
|
70
docs/content/config/auth/oidc.md
Normal file
70
docs/content/config/auth/oidc.md
Normal file
|
@ -0,0 +1,70 @@
|
|||
# OpenID Connect (OIDC)
|
||||
|
||||
HedgeDoc can use one or multiple OIDC servers to authenticate users. To do this, you first need
|
||||
to tell HedgeDoc identifiers for the servers you want to use (`HD_AUTH_OIDC_SERVERS`). Then you
|
||||
need to provide the configuration for these OIDC servers depending on how you want to use them.
|
||||
|
||||
Each of these variables will contain the identifier for the OIDC server.
|
||||
For example, if you chose the identifier `MYOIDC` for your OIDC server, all variables
|
||||
for this server will start with `HD_AUTH_OIDC_MYOIDC_`.
|
||||
|
||||
Replace `$NAME` with the identifier of the OIDC server in the table below accordingly.
|
||||
|
||||
| environment variable | default | example | description |
|
||||
|--------------------------------------|------------------|--------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `HD_AUTH_OIDC_SERVERS` | - | `MYOIDC` | A comma-seperated list of identifiers of OIDC servers HedgeDoc should use. |
|
||||
| `HD_AUTH_OIDC_$NAME_PROVIDER_NAME` | `OpenID Connect` | `My OIDC Single-Sign-On` | The display name for the OIDC server, that is shown in the UI of HegdeDoc. |
|
||||
| `HD_AUTH_OIDC_$NAME_ISSUER` | - | `https://auth.example.com` | The base url of the OIDC issuer. It should serve a file `.well-known/openid-configuration` |
|
||||
| `HD_AUTH_OIDC_$NAME_CLIENT_ID` | - | `hd2` | The id with which HedgeDoc is registered at the OIDC server. |
|
||||
| `HD_AUTH_OIDC_$NAME_CLIENT_SECRET` | - | `c3f70208375cf26700920678ec55b7df7cd75266` | The secret for the HedgeDoc application, given by the OIDC server. |
|
||||
| `HD_AUTH_OIDC_$NAME_THEME` | - | `gitlab`, `google`, ... | The theme in which the button on the login page should be displayed. See below for a list of options. If not defined, a generic one will be used. |
|
||||
| `HD_AUTH_OIDC_$NAME_ENABLE_REGISTER` | `true` | `true`, `false` | If set to `false`, only users that already exist in the HedgeDoc server are able to login. |
|
||||
|
||||
As redirect URL you should configure
|
||||
`https://hedgedoc.example.com/api/private/auth/oidc/$NAME/callback` where `$NAME`
|
||||
is the identifier of the OIDC server. Remember to update the domain to your one.
|
||||
|
||||
You can also configure servers that only support plain OAuth2 but
|
||||
no OIDC (e.g., GitHub or Discord). In this case, you need the following additional variables:
|
||||
|
||||
| environment variable | default | example | description |
|
||||
|--------------------------------------------|----------------------|--------------------------------------------|------------------------------------------------------------------------------------------|
|
||||
| `HD_AUTH_OIDC_$NAME_AUTHORIZE_URL` | - | `https://auth.example.com/oauth2/auth` | The URL to which the user should be redirected to start the OAuth2 flow. |
|
||||
| `HD_AUTH_OIDC_$NAME_TOKEN_URL` | - | `https://auth.example.com/oauth2/token` | The URL to which the user should be redirected to exchange the code for an access token. |
|
||||
| `HD_AUTH_OIDC_$NAME_USERINFO_URL` | - | `https://auth.example.com/oauth2/userinfo` | The URL to which the user should be redirected to get the user information. |
|
||||
| `HD_AUTH_OIDC_$NAME_END_SESSION_URL` | - | `https://auth.example.com/oauth2/logout` | The URL to which the user should be redirected to end the session. |
|
||||
| `HD_AUTH_OIDC_$NAME_SCOPE` | - | `profile` | The scope that should be requested to get the user information. |
|
||||
| `HD_AUTH_OIDC_$NAME_USER_ID_FIELD` | `sub` | `sub`, `id` | The unique identifier that is returned for the user from the OAuth2 provider. |
|
||||
| `HD_AUTH_OIDC_$NAME_USER_ID_FIELD` | `sub` | `sub`, `id` | The unique identifier that is returned for the user from the OAuth2 provider. |
|
||||
| `HD_AUTH_OIDC_$NAME_USER_NAME_FIELD` | `preferred_username` | `preferred_username`, `username` | The unique identifier that is returned for the user from the OAuth2 provider. |
|
||||
| `HD_AUTH_OIDC_$NAME_DISPLAY_NAME_FIELD` | `name` | `name`, `displayName` | The field that contains the display name of the user. |
|
||||
| `HD_AUTH_OIDC_$NAME_PROFILE_PICTURE_FIELD` | - | `picture`, `avatar` | The field that contains the URL to the profile picture of the user. |
|
||||
| `HD_AUTH_OIDC_$NAME_EMAIL_FIELD` | `email` | `email`, `mail` | The field that contains the email address of the user. |
|
||||
|
||||
## Themes
|
||||
|
||||
To integrate the brand colors and icons of some popular OIDC providers into the login button,
|
||||
you can use one of the following values:
|
||||
|
||||
- `google`
|
||||
- `github`
|
||||
- `gitlab`
|
||||
- `facebook`
|
||||
- `discord`
|
||||
- `mastodon`
|
||||
- `azure`
|
||||
|
||||
## Common providers
|
||||
|
||||
| Provider | support | issuer variable | Docs |
|
||||
|-----------|-------------|---------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
|
||||
| Google | OIDC | `https://accounts.google.com` | [Google Docs](https://developers.google.com/identity/openid-connect/openid-connect) |
|
||||
| GitHub | only OAuth2 | `https://github.com` | [GitHub Docs](https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps) |
|
||||
| GitLab | OIDC | `https://gitlab.com` or your instance domain | [GitLab Docs](https://docs.gitlab.com/ee/integration/openid_connect_provider.html) |
|
||||
| Facebook | OIDC | `https://www.facebook.com` | [Facebook Docs](https://developers.facebook.com/docs/facebook-login/overview) |
|
||||
| Discord | only OAuth2 | `https://discord.com` | [Discord Docs](https://discord.com/developers/docs/topics/oauth2) |
|
||||
| Azure | OIDC | `https://login.microsoftonline.com/{tenant}/v2.0`, replace accordingly | [Azure OIDC](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc) |
|
||||
| Auth0 | OIDC | `https://{yourDomain}.us.auth0.com/`, replace accordingly | [Auth0 OIDC](https://auth0.com/docs/authenticate/protocols/openid-connect-protocol) |
|
||||
| Keycloak | OIDC | `https://keycloak.example.com/auth/realms/{realm}`, replace accordingly | [Keycloak Docs](https://www.keycloak.org/docs/latest/server_admin/#sso-protocols) |
|
||||
| Authentik | OIDC | `https://authentik.example.com/application/o/{app}/`, replace accordingly | [Authentik Docs](https://docs.goauthentik.io/docs/providers/oauth2/) |
|
||||
| Authelia | OIDC | `https://authelia.example.com`, replace accordingly | [Authelia Docs](https://www.authelia.com/integration/openid-connect/introduction/) |
|
Loading…
Add table
Add a link
Reference in a new issue