website: format docs with prettier (#2833)

* run prettier

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>

* add scim to comparison

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
Jens L 2022-05-09 21:22:41 +02:00 committed by GitHub
parent 26d92d9259
commit f9469e3f99
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
148 changed files with 3447 additions and 3107 deletions

View file

@ -136,8 +136,8 @@ jobs:
key: ${{ runner.os }}-web-${{ hashFiles('web/package-lock.json', 'web/**') }} key: ${{ runner.os }}-web-${{ hashFiles('web/package-lock.json', 'web/**') }}
- name: prepare web ui - name: prepare web ui
if: steps.cache-web.outputs.cache-hit != 'true' if: steps.cache-web.outputs.cache-hit != 'true'
working-directory: web
run: | run: |
cd web
npm ci npm ci
npm run build npm run build
- name: run e2e - name: run e2e
@ -169,8 +169,8 @@ jobs:
key: ${{ runner.os }}-web-${{ hashFiles('web/package-lock.json', 'web/**') }} key: ${{ runner.os }}-web-${{ hashFiles('web/package-lock.json', 'web/**') }}
- name: prepare web ui - name: prepare web ui
if: steps.cache-web.outputs.cache-hit != 'true' if: steps.cache-web.outputs.cache-hit != 'true'
working-directory: web/
run: | run: |
cd web
npm ci npm ci
npm run build npm run build
- name: run e2e - name: run e2e

View file

@ -118,8 +118,8 @@ jobs:
- name: Generate API - name: Generate API
run: make gen-client-go run: make gen-client-go
- name: Build web - name: Build web
working-directory: web/
run: | run: |
cd web
npm ci npm ci
npm run build-proxy npm run build-proxy
- name: Build outpost - name: Build outpost

View file

@ -20,15 +20,13 @@ jobs:
node-version: '16' node-version: '16'
cache: 'npm' cache: 'npm'
cache-dependency-path: web/package-lock.json cache-dependency-path: web/package-lock.json
- run: | - working-directory: web/
cd web run: npm ci
npm ci
- name: Generate API - name: Generate API
run: make gen-client-web run: make gen-client-web
- name: Eslint - name: Eslint
run: | working-directory: web/
cd web run: npm run lint
npm run lint
lint-prettier: lint-prettier:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@ -38,15 +36,13 @@ jobs:
node-version: '16' node-version: '16'
cache: 'npm' cache: 'npm'
cache-dependency-path: web/package-lock.json cache-dependency-path: web/package-lock.json
- run: | - working-directory: web/
cd web run: npm ci
npm ci
- name: Generate API - name: Generate API
run: make gen-client-web run: make gen-client-web
- name: prettier - name: prettier
run: | working-directory: web/
cd web run: npm run prettier-check
npm run prettier-check
lint-lit-analyse: lint-lit-analyse:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@ -56,15 +52,13 @@ jobs:
node-version: '16' node-version: '16'
cache: 'npm' cache: 'npm'
cache-dependency-path: web/package-lock.json cache-dependency-path: web/package-lock.json
- run: | - working-directory: web/
cd web run: npm ci
npm ci
- name: Generate API - name: Generate API
run: make gen-client-web run: make gen-client-web
- name: lit-analyse - name: lit-analyse
run: | working-directory: web/
cd web run: npm run lit-analyse
npm run lit-analyse
ci-web-mark: ci-web-mark:
needs: needs:
- lint-eslint - lint-eslint
@ -84,12 +78,10 @@ jobs:
node-version: '16' node-version: '16'
cache: 'npm' cache: 'npm'
cache-dependency-path: web/package-lock.json cache-dependency-path: web/package-lock.json
- run: | - working-directory: web/
cd web run: npm ci
npm ci
- name: Generate API - name: Generate API
run: make gen-client-web run: make gen-client-web
- name: build - name: build
run: | working-directory: web/
cd web run: npm run build
npm run build

33
.github/workflows/ci-website.yml vendored Normal file
View file

@ -0,0 +1,33 @@
name: authentik-ci-website
on:
push:
branches:
- master
- next
- version-*
pull_request:
branches:
- master
jobs:
lint-prettier:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3.1.1
with:
node-version: '16'
cache: 'npm'
cache-dependency-path: website/package-lock.json
- working-directory: website/
run: npm ci
- name: prettier
working-directory: website/
run: npm run prettier-check
ci-web-mark:
needs:
- lint-prettier
runs-on: ubuntu-latest
steps:
- run: echo mark

View file

@ -97,8 +97,8 @@ jobs:
cache: 'npm' cache: 'npm'
cache-dependency-path: web/package-lock.json cache-dependency-path: web/package-lock.json
- name: Build web - name: Build web
working-directory: web/
run: | run: |
cd web
npm ci npm ci
npm run build-proxy npm run build-proxy
- name: Build outpost - name: Build outpost

View file

@ -17,15 +17,15 @@ jobs:
- name: Generate API Client - name: Generate API Client
run: make gen-client-web run: make gen-client-web
- name: Publish package - name: Publish package
working-directory: gen-ts-api/
run: | run: |
cd web-api/
npm ci npm ci
npm publish npm publish
env: env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
- name: Upgrade /web - name: Upgrade /web
working-directory: web/
run: | run: |
cd web/
export VERSION=`node -e 'console.log(require("../web-api/package.json").version)'` export VERSION=`node -e 'console.log(require("../web-api/package.json").version)'`
npm i @goauthentik/api@$VERSION npm i @goauthentik/api@$VERSION
- name: Create Pull Request - name: Create Pull Request

View file

@ -2,3 +2,6 @@
build build
coverage coverage
.docusaurus .docusaurus
node_modules
help
static

View file

@ -33,10 +33,7 @@ Below is the response, for example for an Identification stage.
"component": "ak-stage-identification", "component": "ak-stage-identification",
// Stage-specific fields // Stage-specific fields
"user_fields": [ "user_fields": ["username", "email"],
"username",
"email"
],
"password_fields": false, "password_fields": false,
"primary_action": "Log in", "primary_action": "Log in",
"sources": [] "sources": []

View file

@ -4,7 +4,6 @@ title: Websocket API
authentik has two different WebSocket endpoints, one is used for web-based clients to get real-time updates, and the other is used for outposts to report their healthiness. authentik has two different WebSocket endpoints, one is used for web-based clients to get real-time updates, and the other is used for outposts to report their healthiness.
### Web `/ws/client/` ### Web `/ws/client/`
:::info :::info
@ -34,15 +33,15 @@ Authentication is done via the `Authorization` header, same as the regular API.
All messages have two fields, `instruction` and `args`. Instruction is any number from this list: All messages have two fields, `instruction` and `args`. Instruction is any number from this list:
- `0`: ACK, simply acknowledges the previous message - `0`: ACK, simply acknowledges the previous message
- `1`: HELLO, used for monitoring and regularly sent by outposts - `1`: HELLO, used for monitoring and regularly sent by outposts
- `2`: TRIGGER_UPDATE, sent by authentik to trigger a reload of the configuration - `2`: TRIGGER_UPDATE, sent by authentik to trigger a reload of the configuration
Arguments for these messages vary, all though these common args are always sent: Arguments for these messages vary, all though these common args are always sent:
- `args['uuid']`: A unique UUID generated on startup of an outpost, used to uniquely identify it. - `args['uuid']`: A unique UUID generated on startup of an outpost, used to uniquely identify it.
These fields are only sent for HELLO instructions: These fields are only sent for HELLO instructions:
- `args['version']`: Version of the outpost - `args['version']`: Version of the outpost
- `args['buildHash']`: Build hash of the outpost, when available - `args['buildHash']`: Build hash of the outpost, when available

View file

@ -7,19 +7,19 @@ the documentation is easy to read and uses similar phrasing.
# General guidelines # General guidelines
- authentik should always be stylized as `authentik` (with a lower-case a and ending with a k) - authentik should always be stylized as `authentik` (with a lower-case a and ending with a k)
- Documentation should use American english - Documentation should use American english
- Feel free to use Docusaurus-specific features, see [here](https://docusaurus.io/docs/next/markdown-features) - Feel free to use Docusaurus-specific features, see [here](https://docusaurus.io/docs/next/markdown-features)
- Use abbreviations where it makes sense (for commonly used terms like SAML and OAuth) - Use abbreviations where it makes sense (for commonly used terms like SAML and OAuth)
- Phrasing should never blame the user, and should be subjective, i.e - Phrasing should never blame the user, and should be subjective, i.e
- **DON'T** `You may never click x.` - **DON'T** `You may never click x.`
- **DO** `x should never be clicked.` - **DO** `x should never be clicked.`
- When referring to other objects in authentik, use _cursive_ text, and link to the corresponding documentation if possible. - When referring to other objects in authentik, use _cursive_ text, and link to the corresponding documentation if possible.
- When referring to external tools, give an example how to use the tools or explain how the user can use them. - When referring to external tools, give an example how to use the tools or explain how the user can use them.
- Make sure to add the documentation to add to the sidebar, if adding a new page. - Make sure to add the documentation to add to the sidebar, if adding a new page.
- Test how the documentation renders using the Netlify Preview, especially when using Docusaurus-specific features. - Test how the documentation renders using the Netlify Preview, especially when using Docusaurus-specific features.
If you find any documentation that doesn't match these guidelines, feel free to either open an Issue or a PR so they can be fixed. If you find any documentation that doesn't match these guidelines, feel free to either open an Issue or a PR so they can be fixed.
@ -27,12 +27,12 @@ If you find any documentation that doesn't match these guidelines, feel free to
These guidelines apply in addition to the ones above. These guidelines apply in addition to the ones above.
- For placeholders, use angle brackets (`<placeholder-name>`). - For placeholders, use angle brackets (`<placeholder-name>`).
Make sure to also define if the placeholder is something the user needs to define, something another system defines, or randomly generated. Make sure to also define if the placeholder is something the user needs to define, something another system defines, or randomly generated.
If you're adding configuration snippets to the documentation, and the snippet is in a language that supports comments, If you're adding configuration snippets to the documentation, and the snippet is in a language that supports comments,
other placeholders may be used, for example comments referencing an earlier step. other placeholders may be used, for example comments referencing an earlier step.
- For placeholder domains, use `authentik.company` and `app-name.company`, where `app-name` is the name of the application you are writing documentation for. - For placeholder domains, use `authentik.company` and `app-name.company`, where `app-name` is the name of the application you are writing documentation for.
- Try to order the documentation in the order that makes it easiest for the user to configure. - Try to order the documentation in the order that makes it easiest for the user to configure.

View file

@ -4,4 +4,3 @@ slug: /
--- ---
Welcome to the authentik developer documentation. authentik is fully open source and can be found here: https://github.com/goauthentik/authentik Welcome to the authentik developer documentation. authentik is fully open source and can be found here: https://github.com/goauthentik/authentik

View file

@ -6,9 +6,9 @@ If you want to only make changes on the UI, you don't need a backend running fro
### Prerequisites ### Prerequisites
- Node (any recent version should work, we use 16.x to build) - Node (any recent version should work, we use 16.x to build)
- Make (again, any recent version should work) - Make (again, any recent version should work)
- Docker and docker-compose - Docker and docker-compose
### Instructions ### Instructions
@ -28,15 +28,15 @@ If you want to only make changes on the UI, you don't need a backend running fro
4. Add this volume mapping to your compose file 4. Add this volume mapping to your compose file
```yaml ```yaml
version: '3.2' version: "3.2"
services: services:
# [...]
server:
# [...] # [...]
volumes: server:
- ./web:/web # [...]
- ./local.env.yml:/local.env.yml volumes:
- ./web:/web
- ./local.env.yml:/local.env.yml
``` ```
This makes the local web files and the config file available to the authentik server. This makes the local web files and the config file available to the authentik server.

View file

@ -8,11 +8,11 @@ To create a local development setup for authentik, you need the following:
### Requirements ### Requirements
- Python 3.10 - Python 3.10
- poetry, which is used to manage dependencies, and can be installed with `pip install poetry` - poetry, which is used to manage dependencies, and can be installed with `pip install poetry`
- Go 1.18 - Go 1.18
- PostgreSQL (any recent version will do) - PostgreSQL (any recent version will do)
- Redis (any recent version will do) - Redis (any recent version will do)
For PostgreSQL and Redis, you can use the docker-compose file in `scripts/`. You can also use a native install, if you prefer. For PostgreSQL and Redis, you can use the docker-compose file in `scripts/`. You can also use a native install, if you prefer.
@ -28,7 +28,7 @@ To configure authentik to use the local databases, create a file in the authenti
```yaml ```yaml
debug: true debug: true
postgresql: postgresql:
user: postgres user: postgres
log_level: debug log_level: debug
secret_key: "A long key you can generate with `pwgen 40 1` for example" secret_key: "A long key you can generate with `pwgen 40 1` for example"

View file

@ -18,9 +18,9 @@ To simplify translation you can use https://www.transifex.com/beryjuorg/authenti
### Prerequisites ### Prerequisites
- Node (any recent version should work, we use 16.x to build) - Node (any recent version should work, we use 16.x to build)
- Make (again, any recent version should work) - Make (again, any recent version should work)
- Docker - Docker
Run `npm i` in the `/web` folder to install all dependencies. Run `npm i` in the `/web` folder to install all dependencies.

View file

@ -9,42 +9,41 @@ Applications are used to configure and separate the authorization / access contr
## Authorization ## Authorization
Application access can be configured using (Policy) Bindings. Click on an application in the applications list, and select the *Policy / Group / User Bindings* tab. There you can bind users/groups/policies to grant them access. When nothing is bound, everyone has access. You can use this to grant access to one or multiple users/groups, or dynamically give access using policies. Application access can be configured using (Policy) Bindings. Click on an application in the applications list, and select the _Policy / Group / User Bindings_ tab. There you can bind users/groups/policies to grant them access. When nothing is bound, everyone has access. You can use this to grant access to one or multiple users/groups, or dynamically give access using policies.
By default, all users can access applications when no policies are bound. By default, all users can access applications when no policies are bound.
When multiple policies/groups/users are attached, you can configure the *Policy engine mode* to either When multiple policies/groups/users are attached, you can configure the _Policy engine mode_ to either
- Require users to pass all bindings/be member of all groups (ALL), or - Require users to pass all bindings/be member of all groups (ALL), or
- Require users to pass either binding/be member of either group (ANY) - Require users to pass either binding/be member of either group (ANY)
## Appearance ## Appearance
The following aspects can be configured: The following aspects can be configured:
- *Name*: This is the name shown for the application card - _Name_: This is the name shown for the application card
- *Launch URL*: The URL that is opened when a user clicks on the application. When left empty, authentik tries to guess it based on the provider - _Launch URL_: The URL that is opened when a user clicks on the application. When left empty, authentik tries to guess it based on the provider
Starting with authentik 2022.2, you can use placeholders in the launch url to build them dynamically based on logged in user. For example, you can set the Launch URL to `https://goauthentik.io/%(username)s`, which will be replaced with the currently logged in user's username. Starting with authentik 2022.2, you can use placeholders in the launch url to build them dynamically based on logged in user. For example, you can set the Launch URL to `https://goauthentik.io/%(username)s`, which will be replaced with the currently logged in user's username.
- *Icon (URL)*: Optionally configure an Icon for the application - _Icon (URL)_: Optionally configure an Icon for the application
If the authentik server does not have a volume mounted under `/media`, you'll get a text input. This accepts absolute URLs. If you've mounted single files into the container, you can reference them using `https://authentik.company/media/my-file.png`. If the authentik server does not have a volume mounted under `/media`, you'll get a text input. This accepts absolute URLs. If you've mounted single files into the container, you can reference them using `https://authentik.company/media/my-file.png`.
If there is a mount under `/media`, you'll instead see a field to upload a file. If there is a mount under `/media`, you'll instead see a field to upload a file.
- *Publisher*: Text shown below the application - _Publisher_: Text shown below the application
- *Description*: Subtext shown on the application card below the publisher - _Description_: Subtext shown on the application card below the publisher
Applications are shown to users when Applications are shown to users when
- The user has access defined via policies (or the application has no policies bound) - The user has access defined via policies (or the application has no policies bound)
- A Valid Launch URL is configured/could be guessed, this consists of URLs starting with http:// and https:// - A Valid Launch URL is configured/could be guessed, this consists of URLs starting with http:// and https://
#### Hiding applications #### Hiding applications
To hide applications without modifying policy settings and without removing it, you can simply set the *Launch URL* to `blank://blank`, which will hide the application from users. To hide applications without modifying policy settings and without removing it, you can simply set the _Launch URL_ to `blank://blank`, which will hide the application from users.
Keep in mind, the users still have access, so they can still authorize access when the login process is started from the application. Keep in mind, the users still have access, so they can still authorize access when the login process is started from the application.

View file

@ -4,15 +4,15 @@ title: Certificates
Certificates in authentik are used for the following use cases: Certificates in authentik are used for the following use cases:
- Signing and verifying SAML Requests and Responses - Signing and verifying SAML Requests and Responses
- Signing JSON Web Tokens for OAuth and OIDC - Signing JSON Web Tokens for OAuth and OIDC
- Connecting to remote docker hosts using the Docker integration - Connecting to remote docker hosts using the Docker integration
- Verifying LDAP Servers' certificates - Verifying LDAP Servers' certificates
- Encrypting outposts's endpoints - Encrypting outposts's endpoints
## Default certificate ## Default certificate
Every authentik install generates a self-signed certificate on the first start. The certificate is called *authentik Self-signed Certificate* and is valid for 1 year. Every authentik install generates a self-signed certificate on the first start. The certificate is called _authentik Self-signed Certificate_ and is valid for 1 year.
This certificate is generated to be used as a default for all OAuth2/OIDC providers, as these don't require the certificate to be configured on both sides (the signature of a JWT is validated using the [JWKS](https://auth0.com/docs/security/tokens/json-web-tokens/json-web-key-sets) URL). This certificate is generated to be used as a default for all OAuth2/OIDC providers, as these don't require the certificate to be configured on both sides (the signature of a JWT is validated using the [JWKS](https://auth0.com/docs/security/tokens/json-web-tokens/json-web-key-sets) URL).
@ -30,7 +30,7 @@ For Kubernetes, you can map custom secrets/volumes under `/certs`.
You can also bind mount single files into the folder, as long as they fall under this naming schema. You can also bind mount single files into the folder, as long as they fall under this naming schema.
- Files in the root directory will be imported based on their filename. - Files in the root directory will be imported based on their filename.
`/foo.pem` Will be imported as the keypair `foo`. Based on its content its either imported as certificate or private key. `/foo.pem` Will be imported as the keypair `foo`. Based on its content its either imported as certificate or private key.
@ -38,9 +38,9 @@ You can also bind mount single files into the folder, as long as they fall under
Otherwise it will be imported as certificate. Otherwise it will be imported as certificate.
- If the file is called `fullchain.pem` or `privkey.pem` (the output naming of certbot), they will get the name of the parent folder. - If the file is called `fullchain.pem` or `privkey.pem` (the output naming of certbot), they will get the name of the parent folder.
- Files can be in any arbitrary file structure, and can have any extension. - Files can be in any arbitrary file structure, and can have any extension.
- If the path contains `archive`, the files will be ignored (to better support certbot setups). - If the path contains `archive`, the files will be ignored (to better support certbot setups).
``` ```
certs/ certs/
@ -66,29 +66,29 @@ Starting with authentik 2021.12.4, you can configure the certificate authentik u
To use let's encrypt certificates with this setup, using certbot, you can use this compose override (create or edit a file called `docker-compose.override.yml` in the same folder as the authentik docker-compose file) To use let's encrypt certificates with this setup, using certbot, you can use this compose override (create or edit a file called `docker-compose.override.yml` in the same folder as the authentik docker-compose file)
```yaml ```yaml
version: '3.2' version: "3.2"
services: services:
certbot: certbot:
image: certbot/dns-route53:v1.22.0 image: certbot/dns-route53:v1.22.0
volumes: volumes:
- ./letsencrypt:/etc/letsencrypt - ./letsencrypt:/etc/letsencrypt
- ../authentik/certs/:/etc/letsencrypt/live - ../authentik/certs/:/etc/letsencrypt/live
# Variables depending on DNS Plugin # Variables depending on DNS Plugin
environment: environment:
AWS_ACCESS_KEY_ID: ... AWS_ACCESS_KEY_ID: ...
command: command:
- certonly - certonly
- --non-interactive - --non-interactive
- --agree-tos - --agree-tos
- -m your.email@company - -m your.email@company
- -d authentik.company - -d authentik.company
# Again, match with your provider # Again, match with your provider
- --dns-route53 - --dns-route53
``` ```
Afterwards, run `docker-compose up -d`, which will start certbot and generate your certificate. Within a few minutes, you'll see the certificate in your authentik interface. (If the certificate does not appear, restart the worker container. This is caused by incompatible permissions set by certbot). Afterwards, run `docker-compose up -d`, which will start certbot and generate your certificate. Within a few minutes, you'll see the certificate in your authentik interface. (If the certificate does not appear, restart the worker container. This is caused by incompatible permissions set by certbot).
Navigate to *System -> Tenants*, edit any tenant and select the certificate of your choice. Navigate to _System -> Tenants_, edit any tenant and select the certificate of your choice.
Keep in mind this certbot container will only run once, but there are a variety of ways to schedule regular renewals. Keep in mind this certbot container will only run once, but there are a variety of ways to schedule regular renewals.

View file

@ -4,29 +4,29 @@ title: Events
Events are authentik's built-in logging system. Whenever any of the following actions occur, an event is created: Events are authentik's built-in logging system. Whenever any of the following actions occur, an event is created:
- A user logs in/logs out (including the source, if available) - A user logs in/logs out (including the source, if available)
- A user fails to login - A user fails to login
- A user sets their password - A user sets their password
- A user views a token - A user views a token
- An invitation is used - An invitation is used
- A user object is written to during a flow - A user object is written to during a flow
- A user authorizes an application - A user authorizes an application
- A user links a source to their account - A user links a source to their account
- A user starts/ends impersonation, including the user that was impersonated - A user starts/ends impersonation, including the user that was impersonated
- A policy is executed (when a policy has "Execution Logging" enabled) - A policy is executed (when a policy has "Execution Logging" enabled)
- A policy or property mapping causes an exception - A policy or property mapping causes an exception
- A configuration error occurs, for example during the authorization of an application - A configuration error occurs, for example during the authorization of an application
- Any objects is created/updated/deleted - Any objects is created/updated/deleted
- An update is available - An update is available
Certain information is stripped from events, to ensure no passwords or other credentials are saved in the log. Certain information is stripped from events, to ensure no passwords or other credentials are saved in the log.

View file

@ -13,7 +13,7 @@ This will send a POST request to the given URL with the following contents:
"body": "body of the notification message", "body": "body of the notification message",
"severity": "severity level as configured in the trigger", "severity": "severity level as configured in the trigger",
"user_email": "user's email", "user_email": "user's email",
"user_username": "user's username", "user_username": "user's username"
} }
``` ```

View file

@ -1,4 +1,4 @@
- `ak_logger`: structlog BoundLogger. See ([structlog documentation](https://www.structlog.org/en/stable/api.html#structlog.BoundLogger)) - `ak_logger`: structlog BoundLogger. See ([structlog documentation](https://www.structlog.org/en/stable/api.html#structlog.BoundLogger))
Example: Example:
@ -8,4 +8,4 @@
ak_logger.info("Passing structured data", request=request) ak_logger.info("Passing structured data", request=request)
``` ```
- `requests`: requests Session object. See ([request documentation](https://requests.readthedocs.io/en/master/user/advanced/)) - `requests`: requests Session object. See ([request documentation](https://requests.readthedocs.io/en/master/user/advanced/))

View file

@ -1,4 +1,4 @@
- `user`: The current user. This may be `None` if there is no contextual user. See ([User](../user-group/user.md#object-attributes)) - `user`: The current user. This may be `None` if there is no contextual user. See ([User](../user-group/user.md#object-attributes))
Example: Example:
@ -6,4 +6,4 @@ Example:
return { return {
"custom_attribute": request.user.attributes.get("custom_attribute", "default"), "custom_attribute": request.user.attributes.get("custom_attribute", "default"),
} }
``` ```

View file

@ -6,6 +6,6 @@ The headless flow executor is used by clients which don't have access to the web
The following stages are supported: The following stages are supported:
- [**identification**](../stages/identification/) - [**identification**](../stages/identification/)
- [**password**](../stages/password/) - [**password**](../stages/password/)
- [**authenticator_validate**](../stages/authenticator_validate/) (currently only DUO devices are supported) - [**authenticator_validate**](../stages/authenticator_validate/) (currently only DUO devices are supported)

View file

@ -9,6 +9,6 @@ Requires authentik 2022.3.1
The user interface (`/if/user/`) embeds a downsized flow executor to allow the user to configure their profile using custom stages and prompts. The user interface (`/if/user/`) embeds a downsized flow executor to allow the user to configure their profile using custom stages and prompts.
This executor only supports [**prompt**](../stages/prompt/) stages. If the configured flow contains another stage, a button will be shown to open the default executor. This executor only supports [**prompt**](../stages/prompt/) stages. If the configured flow contains another stage, a button will be shown to open the default executor.
Because the stages in a flow can change during it execution, this executor will redirect the user to the default interface *if* a non-supported stage is returned. Because the stages in a flow can change during it execution, this executor will redirect the user to the default interface _if_ a non-supported stage is returned.
To configure which flow is used for this, configure it in the tenant settings. To configure which flow is used for this, configure it in the tenant settings.

View file

@ -6,9 +6,9 @@ Flows are a method of describing a sequence of stages. A stage represents a sing
For example, a standard login flow would consist of the following stages: For example, a standard login flow would consist of the following stages:
- Identification, user identifies themselves via a username or email address - Identification, user identifies themselves via a username or email address
- Password, the user's password is checked against the hash in the database - Password, the user's password is checked against the hash in the database
- Log the user in - Log the user in
Upon flow execution, a plan containing all stages is generated. This means that all attached policies are evaluated upon execution. This behaviour can be altered by enabling the **Re-evaluate Policies** option on the binding. Upon flow execution, a plan containing all stages is generated. This means that all attached policies are evaluated upon execution. This behaviour can be altered by enabling the **Re-evaluate Policies** option on the binding.

View file

@ -22,7 +22,7 @@ This API requires version 2021.9.1 or later
You can call the `/api/v3/stages/authenticator/duo/{stage_uuid}/import_devices/` endpoint ([see here](https://goauthentik.io/api/#post-/stages/authenticator/duo/-stage_uuid-/import_devices/)) using the following parameters: You can call the `/api/v3/stages/authenticator/duo/{stage_uuid}/import_devices/` endpoint ([see here](https://goauthentik.io/api/#post-/stages/authenticator/duo/-stage_uuid-/import_devices/)) using the following parameters:
- `duo_user_id`: The Duo User's ID. This can be found in the Duo Admin Portal, navigating to the user list and clicking on a single user. Their ID is shown in th URL. - `duo_user_id`: The Duo User's ID. This can be found in the Duo Admin Portal, navigating to the user list and clicking on a single user. Their ID is shown in th URL.
- `username`: The authentik user's username to assign the device to. - `username`: The authentik user's username to assign the device to.
Additionally, you need to pass `stage_uuid` which is the `authenticator_duo` stage, in which you entered your API credentials. Additionally, you need to pass `stage_uuid` which is the `authenticator_duo` stage, in which you entered your API credentials.

View file

@ -8,23 +8,23 @@ This stage configures an SMS-based authenticator using either Twilio, or a gener
Navigate to https://console.twilio.com/, and log in to your existing account, or create a new one. Navigate to https://console.twilio.com/, and log in to your existing account, or create a new one.
In the sidebar, navigate to *Explore Products*, then *Messaging*, and *Services* below that. In the sidebar, navigate to _Explore Products_, then _Messaging_, and _Services_ below that.
Click on *Create Messaging Service* to create a new set of API credentials. Click on _Create Messaging Service_ to create a new set of API credentials.
Give the service a Name, and select *Verify users* as a use-case. Give the service a Name, and select _Verify users_ as a use-case.
In the next step, add an address from your Sender Pool. Instructions on how to create numbers are not covered here, please check the Twilio documentation [here](https://www.twilio.com/docs). In the next step, add an address from your Sender Pool. Instructions on how to create numbers are not covered here, please check the Twilio documentation [here](https://www.twilio.com/docs).
The other two steps can be skipped using the *Skip setup* button. The other two steps can be skipped using the _Skip setup_ button.
Afterwards, copy the value of **Messaging Service SID**. This is the value for the *Twilio Account SID* field in authentik. Afterwards, copy the value of **Messaging Service SID**. This is the value for the _Twilio Account SID_ field in authentik.
Navigate back to the root of your Twilio console, and copy the Auth token. This is the value for the *Twilio Auth Token* field in authentik. Navigate back to the root of your Twilio console, and copy the Auth token. This is the value for the _Twilio Auth Token_ field in authentik.
## Generic ## Generic
For the generic provider, a POST request will be sent to the URL you have specified in the *External API URL* field. The request payload looks like this For the generic provider, a POST request will be sent to the URL you have specified in the _External API URL_ field. The request payload looks like this
```json ```json
{ {

View file

@ -4,19 +4,19 @@ title: Authenticator Validation Stage
This stage validates an already configured Authenticator Device. This device has to be configured using any of the other authenticator stages: This stage validates an already configured Authenticator Device. This device has to be configured using any of the other authenticator stages:
- [Duo authenticator stage](../authenticator_duo/) - [Duo authenticator stage](../authenticator_duo/)
- [SMS authenticator stage](../authenticator_sms/). - [SMS authenticator stage](../authenticator_sms/).
- [Static authenticator stage](../authenticator_static/). - [Static authenticator stage](../authenticator_static/).
- [TOTP authenticator stage](../authenticator_totp/) - [TOTP authenticator stage](../authenticator_totp/)
- [WebAuth authenticator stage](../authenticator_webauthn/). - [WebAuth authenticator stage](../authenticator_webauthn/).
You can select which type of device classes are allowed. You can select which type of device classes are allowed.
Using the `Not configured action`, you can choose what happens when a user does not have any matching devices. Using the `Not configured action`, you can choose what happens when a user does not have any matching devices.
- Skip: Validation is skipped and the flow continues - Skip: Validation is skipped and the flow continues
- Deny: Access is denied, the flow execution ends - Deny: Access is denied, the flow execution ends
- Configure: This option requires a *Configuration stage* to be set. The validation stage will be marked as successful, and the configuration stage will be injected into the flow. - Configure: This option requires a _Configuration stage_ to be set. The validation stage will be marked as successful, and the configuration stage will be injected into the flow.
## Passwordless authentication ## Passwordless authentication
@ -26,17 +26,17 @@ Requires authentik 2021.12.4
Passwordless authentication currently only supports WebAuthn devices, like security keys and biometrics. Passwordless authentication currently only supports WebAuthn devices, like security keys and biometrics.
To configure passwordless authentication, create a new Flow with the delegation set to *Authentication*. To configure passwordless authentication, create a new Flow with the delegation set to _Authentication_.
As first stage, add an *Authentication validation* stage, with the WebAuthn device class allowed. As first stage, add an _Authentication validation_ stage, with the WebAuthn device class allowed.
After this stage you can bind any additional verification stages. After this stage you can bind any additional verification stages.
As final stage, bind a *User login* stage. As final stage, bind a _User login_ stage.
Users can either access this flow directly via it's URL, or you can modify any Identification stage to add a direct link to this flow. Users can either access this flow directly via it's URL, or you can modify any Identification stage to add a direct link to this flow.
#### Logging #### Logging
Logins which used Passwordless authentication have the *auth_method* context variable set to `auth_webauthn_pwl`, and the device used is saved in the arguments. Example: Logins which used Passwordless authentication have the _auth_method_ context variable set to `auth_webauthn_pwl`, and the device used is saved in the arguments. Example:
```json ```json
{ {

View file

@ -6,5 +6,5 @@ This stage stops the execution of a flow. This can be used to conditionally deny
even if they are not signed in (and permissions can't be checked via groups). even if they are not signed in (and permissions can't be checked via groups).
:::caution :::caution
To effectively use this stage, make sure to **disable** *Evaluate on plan* on the Stage binding. To effectively use this stage, make sure to **disable** _Evaluate on plan_ on the Stage binding.
::: :::

View file

@ -41,27 +41,21 @@ If you've add the line and created a file, and can't see if, check the logs usin
Templates are rendered using Django's templating engine. The following variables can be used: Templates are rendered using Django's templating engine. The following variables can be used:
- `url`: The full URL for the user to click on - `url`: The full URL for the user to click on
- `user`: The pending user object. - `user`: The pending user object.
- `expires`: The timestamp when the token expires. - `expires`: The timestamp when the token expires.
```html ```html
{# This is how you can write comments which aren't rendered. #} {# This is how you can write comments which aren't rendered. #} {# Extend this
template from the base email template, which includes base layout and CSS. #} {%
{# Extend this template from the base email template, which includes base layout and CSS. #} extends "email/base.html" %} {# Load the internationalization module to
{% extends "email/base.html" %} translate strings, and humanize to show date-time #} {% load i18n %} {% load
humanize %} {# The email/base.html template uses a single "content" block #} {%
{# Load the internationalization module to translate strings, and humanize to show date-time #} block content %}
{% load i18n %}
{% load humanize %}
{# The email/base.html template uses a single "content" block #}
{% block content %}
<tr> <tr>
<td class="alert alert-success"> <td class="alert alert-success">
{% blocktrans with username=user.username %} {% blocktrans with username=user.username %} Hi {{ username }}, {%
Hi {{ username }}, endblocktrans %}
{% endblocktrans %}
</td> </td>
</tr> </tr>
<tr> <tr>
@ -69,35 +63,55 @@ Templates are rendered using Django's templating engine. The following variables
<table width="100%" cellpadding="0" cellspacing="0"> <table width="100%" cellpadding="0" cellspacing="0">
<tr> <tr>
<td class="content-block"> <td class="content-block">
{% blocktrans %} {% blocktrans %} You recently requested to change your
You recently requested to change your password for you authentik account. Use the button below to set a new password. password for you authentik account. Use the button below to
{% endblocktrans %} set a new password. {% endblocktrans %}
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="content-block"> <td class="content-block">
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="btn btn-primary"> <table
role="presentation"
border="0"
cellpadding="0"
cellspacing="0"
class="btn btn-primary"
>
<tbody> <tbody>
<tr> <tr>
<td align="center"> <td align="center">
<table role="presentation" border="0" cellpadding="0" cellspacing="0"> <table
<tbody> role="presentation"
<tr> border="0"
<td> <a id="confirm" href="{{ url }}" rel="noopener noreferrer" target="_blank">{% trans 'Reset Password' %}</a> </td> cellpadding="0"
</tr> cellspacing="0"
</tbody> >
</table> <tbody>
</td> <tr>
</tr> <td>
<a
id="confirm"
href="{{ url }}"
rel="noopener noreferrer"
target="_blank"
>{% trans 'Reset
Password' %}</a
>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody> </tbody>
</table> </table>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="content-block"> <td class="content-block">
{% blocktrans with expires=expires|naturaltime %} {% blocktrans with expires=expires|naturaltime %} If you did
If you did not request a password change, please ignore this Email. The link above is valid for {{ expires }}. not request a password change, please ignore this Email. The
{% endblocktrans %} link above is valid for {{ expires }}. {% endblocktrans %}
</td> </td>
</tr> </tr>
</table> </table>

View file

@ -11,8 +11,8 @@ This stage provides a ready-to-go form for users to identify themselves.
Select which fields the user can use to identify themselves. Multiple fields can be specified and separated with a comma. Select which fields the user can use to identify themselves. Multiple fields can be specified and separated with a comma.
Valid choices: Valid choices:
- email - email
- username - username
### Template ### Template

View file

@ -10,4 +10,4 @@ To check if a user has used an invitation within a policy, you can check `reques
To use an invitation, use the URL `https://authentik.tld/if/flow/your-enrollment-flow/?itoken=invitation-token`. To use an invitation, use the URL `https://authentik.tld/if/flow/your-enrollment-flow/?itoken=invitation-token`.
You can also prompt the user for an invite by using the [*Prompt stage*](../prompt/) by using a field with a field key of `token`. You can also prompt the user for an invite by using the [_Prompt stage_](../prompt/) by using a field with a field key of `token`.

View file

@ -6,7 +6,7 @@ This is a generic password prompt which authenticates the current `pending_user`
## Passwordless login ## Passwordless login
To achieve a "passwordless" experience; authenticating users based only on TOTP/WebAuthn/Duo, create an expression policy and optionally skip the password stage. To achieve a "passwordless" experience; authenticating users based only on TOTP/WebAuthn/Duo, create an expression policy and optionally skip the password stage.
Depending on what kind of device you want to require the user to have: Depending on what kind of device you want to require the user to have:
@ -26,4 +26,4 @@ return DuoDevice.objects.filter(user=request.user, confirmed=True).exists()
Afterwards, bind the policy you've created to the stage binding of the password stage. Afterwards, bind the policy you've created to the stage binding of the password stage.
Make sure to uncheck *Evaluate on plan* and check *Re-evaluate policies*, otherwise an invalid result will be cached. Make sure to uncheck _Evaluate on plan_ and check _Re-evaluate policies_, otherwise an invalid result will be cached.

View file

@ -8,27 +8,27 @@ This stage is used to show the user arbitrary prompts.
The prompt can be any of the following types: The prompt can be any of the following types:
| Type | Description | | Type | Description |
| -------- | ----------------------------------------------------------------- | | ----------------- | ---------------------------------------------------------------------------------------- |
| Text | Arbitrary text. No client-side validation is done. | | Text | Arbitrary text. No client-side validation is done. |
| Text (Read only) | Same as above, but cannot be edited. | | Text (Read only) | Same as above, but cannot be edited. |
| Username | Same as text, except the username is validated to be unique. | | Username | Same as text, except the username is validated to be unique. |
| Email | Text input, ensures the value is an email address (validation is only done client-side). | | Email | Text input, ensures the value is an email address (validation is only done client-side). |
| Password | Same as text, shown as a password field client-side, and custom validation (see below). | | Password | Same as text, shown as a password field client-side, and custom validation (see below). |
| Number | Numerical textbox. | | Number | Numerical textbox. |
| Checkbox | Simple checkbox. | | Checkbox | Simple checkbox. |
| Date | Same as text, except the client renders a date-picker | | Date | Same as text, except the client renders a date-picker |
| Date-time | Same as text, except the client renders a date-time-picker | | Date-time | Same as text, except the client renders a date-time-picker |
| Separator | Passive element to group surrounding elements | | Separator | Passive element to group surrounding elements |
| Hidden | Hidden input field. Allows for the pre-setting of default values. | | Hidden | Hidden input field. Allows for the pre-setting of default values. |
| Static | Display arbitrary value as is | | Static | Display arbitrary value as is |
| authentik: Locale | Display a list of all locales authentik supports. | | authentik: Locale | Display a list of all locales authentik supports. |
Some types have special behaviors: Some types have special behaviors:
- *Username*: Input is validated against other usernames to ensure a unique value is provided. - _Username_: Input is validated against other usernames to ensure a unique value is provided.
- *Password*: All prompts with the type password within the same stage are compared and must be equal. If they are not equal, an error is shown - _Password_: All prompts with the type password within the same stage are compared and must be equal. If they are not equal, an error is shown
- *Hidden* and *Static*: Their placeholder values are defaults and are not user-changeable. - _Hidden_ and _Static_: Their placeholder values are defaults and are not user-changeable.
A prompt has the following attributes: A prompt has the following attributes:
@ -52,7 +52,7 @@ A flag which decides whether or not this field is required.
A field placeholder, shown within the input field. This field is also used by the `hidden` type as the actual value. A field placeholder, shown within the input field. This field is also used by the `hidden` type as the actual value.
By default, the placeholder is interpreted as-is. If you enable *Interpret placeholder as expression*, the placeholder By default, the placeholder is interpreted as-is. If you enable _Interpret placeholder as expression_, the placeholder
will be evaluated as a python expression. This happens in the same environment as [_Property mappings_](../../../property-mappings/expression). will be evaluated as a python expression. This happens in the same environment as [_Property mappings_](../../../property-mappings/expression).
You can access both the HTTP request and the user as with a mapping. Additionally, you can access `prompt_context`, which is a dictionary of the current state of the prompt stage's data. You can access both the HTTP request and the user as with a mapping. Additionally, you can access `prompt_context`, which is a dictionary of the current state of the prompt stage's data.

View file

@ -8,16 +8,16 @@ It can be used after `user_write` during an enrollment flow, or after a `passwor
## Session duration ## Session duration
By default, the authentik session expires when you close your browser (*seconds=0*). By default, the authentik session expires when you close your browser (_seconds=0_).
You can set the session to expire after any duration using the syntax of `hours=1,minutes=2,seconds=3`. The following keys are allowed: You can set the session to expire after any duration using the syntax of `hours=1,minutes=2,seconds=3`. The following keys are allowed:
- Microseconds - Microseconds
- Milliseconds - Milliseconds
- Seconds - Seconds
- Minutes - Minutes
- Hours - Hours
- Days - Days
- Weeks - Weeks
All values accept floating-point values. All values accept floating-point values.

View file

@ -13,7 +13,7 @@ See [Docker-compose](installation/docker-compose) or [Kubernetes](installation/k
## Screenshots ## Screenshots
Light | Dark | Light | Dark |
--- | --- | -------------------------------- | ------------------------------- |
![](/img/screen_apps_light.jpg) | ![](/img/screen_apps_dark.jpg) | ![](/img/screen_apps_light.jpg) | ![](/img/screen_apps_dark.jpg) |
![](/img/screen_admin_light.jpg) | ![](/img/screen_admin_dark.jpg) | ![](/img/screen_admin_light.jpg) | ![](/img/screen_admin_dark.jpg) |

View file

@ -6,10 +6,10 @@ title: Air-gapped environments
By default, authentik creates outbound connections to the following URLs: By default, authentik creates outbound connections to the following URLs:
- https://version.goauthentik.io: Periodic update check - https://version.goauthentik.io: Periodic update check
- https://goauthentik.io: Anonymous analytics on startup - https://goauthentik.io: Anonymous analytics on startup
- https://secure.gravatar.com: Avatars for users - https://secure.gravatar.com: Avatars for users
- https://sentry.beryju.org: Error reporting - https://sentry.beryju.org: Error reporting
To disable these outbound connections, set the following in your `.env` file: To disable these outbound connections, set the following in your `.env` file:
@ -35,6 +35,6 @@ authentik:
Container images can be pulled from the following URLs: Container images can be pulled from the following URLs:
- ghcr.io/goauthentik/server (https://ghcr.io) - ghcr.io/goauthentik/server (https://ghcr.io)
- goauthentik.io/server (https://goauthentik.io) - goauthentik.io/server (https://goauthentik.io)
- beryju/authentik (https://index.docker.io) - beryju/authentik (https://index.docker.io)

View file

@ -2,10 +2,10 @@
title: Beta versions title: Beta versions
--- ---
You can test upcoming authentik versions by switching to the *next* images. These beta versions supported upgrades from the latest stable version, and have a supported upgrade plan to the next stable version. You can test upcoming authentik versions by switching to the _next_ images. These beta versions supported upgrades from the latest stable version, and have a supported upgrade plan to the next stable version.
import Tabs from '@theme/Tabs'; import Tabs from "@theme/Tabs";
import TabItem from '@theme/TabItem'; import TabItem from "@theme/TabItem";
<Tabs <Tabs
defaultValue="docker-compose" defaultValue="docker-compose"
@ -23,21 +23,23 @@ AUTHENTIK_OUTPOSTS__CONTAINER_IMAGE_BASE=ghcr.io/goauthentik/dev-%(type)s:gh-nex
``` ```
Afterwards, run the upgrade commands from the latest release notes. Afterwards, run the upgrade commands from the latest release notes.
</TabItem> </TabItem>
<TabItem value="kubernetes"> <TabItem value="kubernetes">
Add the following block to your `values.yml` file: Add the following block to your `values.yml` file:
```yaml ```yaml
authentik: authentik:
outposts: outposts:
container_image_base: ghcr.io/goauthentik/dev-%(type)s:gh-%(build_hash)s container_image_base: ghcr.io/goauthentik/dev-%(type)s:gh-%(build_hash)s
image: image:
repository: ghcr.io/goauthentik/dev-server repository: ghcr.io/goauthentik/dev-server
tag: gh-next tag: gh-next
# pullPolicy: Always to ensure you always get the latest version # pullPolicy: Always to ensure you always get the latest version
pullPolicy: Always pullPolicy: Always
``` ```
Afterwards, run the upgrade commands from the latest release notes. Afterwards, run the upgrade commands from the latest release notes.
</TabItem> </TabItem>
</Tabs> </Tabs>

View file

@ -12,30 +12,30 @@ The double-underscores are intentional, as all these settings are translated to
All of these variables can be set to values, but you can also use a URI-like format to load values from other places: All of these variables can be set to values, but you can also use a URI-like format to load values from other places:
- `env://<name>` Loads the value from the environment variable `<name>`. Fallback can be optionally set like `env://<name>?<default>` - `env://<name>` Loads the value from the environment variable `<name>`. Fallback can be optionally set like `env://<name>?<default>`
- `file://<name>` Loads the value from the file `<name>`. Fallback can be optionally set like `file://<name>?<default>` - `file://<name>` Loads the value from the file `<name>`. Fallback can be optionally set like `file://<name>?<default>`
## PostgreSQL Settings ## PostgreSQL Settings
- `AUTHENTIK_POSTGRESQL__HOST`: Hostname of your PostgreSQL Server - `AUTHENTIK_POSTGRESQL__HOST`: Hostname of your PostgreSQL Server
- `AUTHENTIK_POSTGRESQL__NAME`: Database name - `AUTHENTIK_POSTGRESQL__NAME`: Database name
- `AUTHENTIK_POSTGRESQL__USER`: Database user - `AUTHENTIK_POSTGRESQL__USER`: Database user
- `AUTHENTIK_POSTGRESQL__PORT`: Database port, defaults to 5432 - `AUTHENTIK_POSTGRESQL__PORT`: Database port, defaults to 5432
- `AUTHENTIK_POSTGRESQL__PASSWORD`: Database password, defaults to the environment variable `POSTGRES_PASSWORD` - `AUTHENTIK_POSTGRESQL__PASSWORD`: Database password, defaults to the environment variable `POSTGRES_PASSWORD`
## Redis Settings ## Redis Settings
- `AUTHENTIK_REDIS__HOST`: Hostname of your Redis Server - `AUTHENTIK_REDIS__HOST`: Hostname of your Redis Server
- `AUTHENTIK_REDIS__PORT`: Redis port, defaults to 6379 - `AUTHENTIK_REDIS__PORT`: Redis port, defaults to 6379
- `AUTHENTIK_REDIS__PASSWORD`: Password for your Redis Server - `AUTHENTIK_REDIS__PASSWORD`: Password for your Redis Server
- `AUTHENTIK_REDIS__CACHE_DB`: Database for caching, defaults to 0 - `AUTHENTIK_REDIS__CACHE_DB`: Database for caching, defaults to 0
- `AUTHENTIK_REDIS__MESSAGE_QUEUE_DB`: Database for the message queue, defaults to 1 - `AUTHENTIK_REDIS__MESSAGE_QUEUE_DB`: Database for the message queue, defaults to 1
- `AUTHENTIK_REDIS__WS_DB`: Database for websocket connections, defaults to 2 - `AUTHENTIK_REDIS__WS_DB`: Database for websocket connections, defaults to 2
- `AUTHENTIK_REDIS__OUTPOST_SESSION_DB`: Database for sessions for the embedded outpost, defaults to 3 - `AUTHENTIK_REDIS__OUTPOST_SESSION_DB`: Database for sessions for the embedded outpost, defaults to 3
- `AUTHENTIK_REDIS__CACHE_TIMEOUT`: Timeout for cached data until it expires in seconds, defaults to 300 - `AUTHENTIK_REDIS__CACHE_TIMEOUT`: Timeout for cached data until it expires in seconds, defaults to 300
- `AUTHENTIK_REDIS__CACHE_TIMEOUT_FLOWS`: Timeout for cached flow plans until they expire in seconds, defaults to 300 - `AUTHENTIK_REDIS__CACHE_TIMEOUT_FLOWS`: Timeout for cached flow plans until they expire in seconds, defaults to 300
- `AUTHENTIK_REDIS__CACHE_TIMEOUT_POLICIES`: Timeout for cached policies until they expire in seconds, defaults to 300 - `AUTHENTIK_REDIS__CACHE_TIMEOUT_POLICIES`: Timeout for cached policies until they expire in seconds, defaults to 300
- `AUTHENTIK_REDIS__CACHE_TIMEOUT_REPUTATION`: Timeout for cached reputation until they expire in seconds, defaults to 300 - `AUTHENTIK_REDIS__CACHE_TIMEOUT_REPUTATION`: Timeout for cached reputation until they expire in seconds, defaults to 300
## authentik Settings ## authentik Settings
@ -47,7 +47,7 @@ Secret key used for cookie signing and unique user IDs, don't change this after
Log level for the server and worker containers. Possible values: debug, info, warning, error Log level for the server and worker containers. Possible values: debug, info, warning, error
Starting with 2021.12.3, you can also set the log level to *trace*. This has no affect on the core authentik server, but shows additional messages for the embedded outpost. Starting with 2021.12.3, you can also set the log level to _trace_. This has no affect on the core authentik server, but shows additional messages for the embedded outpost.
Defaults to `info`. Defaults to `info`.
@ -61,92 +61,93 @@ Disable the inbuilt update-checker. Defaults to `false`.
### AUTHENTIK_ERROR_REPORTING ### AUTHENTIK_ERROR_REPORTING
- `AUTHENTIK_ERROR_REPORTING__ENABLED` - `AUTHENTIK_ERROR_REPORTING__ENABLED`
Enable error reporting. Defaults to `false`. Enable error reporting. Defaults to `false`.
Error reports are sent to https://sentry.beryju.org, and are used for debugging and general feedback. Anonymous performance data is also sent. Error reports are sent to https://sentry.beryju.org, and are used for debugging and general feedback. Anonymous performance data is also sent.
- `AUTHENTIK_ERROR_REPORTING__ENVIRONMENT` - `AUTHENTIK_ERROR_REPORTING__ENVIRONMENT`
Unique environment that is attached to your error reports, should be set to your email address for example. Defaults to `customer`. Unique environment that is attached to your error reports, should be set to your email address for example. Defaults to `customer`.
- `AUTHENTIK_ERROR_REPORTING__SEND_PII` - `AUTHENTIK_ERROR_REPORTING__SEND_PII`
Whether or not to send personal data, like usernames. Defaults to `false`. Whether or not to send personal data, like usernames. Defaults to `false`.
### AUTHENTIK_EMAIL ### AUTHENTIK_EMAIL
- `AUTHENTIK_EMAIL__HOST` - `AUTHENTIK_EMAIL__HOST`
Default: `localhost` Default: `localhost`
- `AUTHENTIK_EMAIL__PORT` - `AUTHENTIK_EMAIL__PORT`
Default: `25` Default: `25`
- `AUTHENTIK_EMAIL__USERNAME` - `AUTHENTIK_EMAIL__USERNAME`
Default: `` (Don't add quotation marks) Default: `` (Don't add quotation marks)
- `AUTHENTIK_EMAIL__PASSWORD` - `AUTHENTIK_EMAIL__PASSWORD`
Default: `` (Don't add quotation marks) Default: `` (Don't add quotation marks)
- `AUTHENTIK_EMAIL__USE_TLS` - `AUTHENTIK_EMAIL__USE_TLS`
Default: `false` Default: `false`
- `AUTHENTIK_EMAIL__USE_SSL` - `AUTHENTIK_EMAIL__USE_SSL`
Default: `false` Default: `false`
- `AUTHENTIK_EMAIL__TIMEOUT` - `AUTHENTIK_EMAIL__TIMEOUT`
Default: `10` Default: `10`
- `AUTHENTIK_EMAIL__FROM` - `AUTHENTIK_EMAIL__FROM`
Default: `authentik@localhost` Default: `authentik@localhost`
Email address authentik will send from, should have a correct @domain Email address authentik will send from, should have a correct @domain
To change the sender's display name, use a format like `Name <account@domain>`. To change the sender's display name, use a format like `Name <account@domain>`.
### AUTHENTIK_OUTPOSTS ### AUTHENTIK_OUTPOSTS
- `AUTHENTIK_OUTPOSTS__CONTAINER_IMAGE_BASE` - `AUTHENTIK_OUTPOSTS__CONTAINER_IMAGE_BASE`
Placeholders: Placeholders:
- `%(type)s`: Outpost type; proxy, ldap, etc
- `%(version)s`: Current version; 2021.4.1
- `%(build_hash)s`: Build hash if you're running a beta version
Placeholder for outpost docker images. Default: `ghcr.io/goauthentik/%(type)s:%(version)s`. - `%(type)s`: Outpost type; proxy, ldap, etc
- `%(version)s`: Current version; 2021.4.1
- `%(build_hash)s`: Build hash if you're running a beta version
- `AUTHENTIK_OUTPOSTS__DISCOVER` Placeholder for outpost docker images. Default: `ghcr.io/goauthentik/%(type)s:%(version)s`.
Configure the automatic discovery of integrations. Defaults to `true`. - `AUTHENTIK_OUTPOSTS__DISCOVER`
By default, the following is discovered: Configure the automatic discovery of integrations. Defaults to `true`.
- Kubernetes in-cluster config By default, the following is discovered:
- Kubeconfig
- Existence of a docker socket - Kubernetes in-cluster config
- Kubeconfig
- Existence of a docker socket
### AUTHENTIK_AVATARS ### AUTHENTIK_AVATARS
Configure how authentik should show avatars for users. Following values can be set: Configure how authentik should show avatars for users. Following values can be set:
- `none`: Disables per-user avatars and just shows a 1x1 pixel transparent picture - `none`: Disables per-user avatars and just shows a 1x1 pixel transparent picture
- `gravatar`: Uses gravatar with the user's email address (default) - `gravatar`: Uses gravatar with the user's email address (default)
- Any URL: If you want to use images hosted on another server, you can set any URL. - Any URL: If you want to use images hosted on another server, you can set any URL.
Additionally, these placeholders can be used: Additionally, these placeholders can be used:
- `%(username)s`: The user's username - `%(username)s`: The user's username
- `%(mail_hash)s`: The email address, md5 hashed - `%(mail_hash)s`: The email address, md5 hashed
- `%(upn)s`: The user's UPN, if set (otherwise an empty string) - `%(upn)s`: The user's UPN, if set (otherwise an empty string)
### AUTHENTIK_DEFAULT_USER_CHANGE_NAME ### AUTHENTIK_DEFAULT_USER_CHANGE_NAME

View file

@ -6,9 +6,9 @@ This installation method is for test-setups and small-scale productive setups.
## Requirements ## Requirements
- A Linux host with at least 2 CPU cores and 2 GB of RAM. - A Linux host with at least 2 CPU cores and 2 GB of RAM.
- docker - docker
- docker-compose - docker-compose
## Preparation ## Preparation
@ -95,15 +95,15 @@ To start the initial setup, navigate to `https://<your server>/if/flow/initial-s
The docker-compose project contains the following containers: The docker-compose project contains the following containers:
- server - server
This is the backend service, which does all the logic, runs the API and the actual SSO part. It also runs the frontend, hosts the JS/CSS files, and also serves the files you've uploaded for icons/etc. This is the backend service, which does all the logic, runs the API and the actual SSO part. It also runs the frontend, hosts the JS/CSS files, and also serves the files you've uploaded for icons/etc.
- worker - worker
This container executes background tasks, everything you can see on the *System Tasks* page in the frontend. This container executes background tasks, everything you can see on the _System Tasks_ page in the frontend.
- redis & postgresql - redis & postgresql
Cache and database respectively. Cache and database respectively.

View file

@ -10,28 +10,27 @@ Create a values.yaml file with a minimum of these settings:
```yaml ```yaml
authentik: authentik:
secret_key: "PleaseGenerateA50CharKey" secret_key: "PleaseGenerateA50CharKey"
# This sends anonymous usage-data, stack traces on errors and # This sends anonymous usage-data, stack traces on errors and
# performance data to sentry.beryju.org, and is fully opt-in # performance data to sentry.beryju.org, and is fully opt-in
error_reporting: error_reporting:
enabled: true enabled: true
postgresql: postgresql:
password: "ThisIsNotASecurePassword" password: "ThisIsNotASecurePassword"
ingress: ingress:
enabled: true enabled: true
hosts: hosts:
- host: authentik.domain.tld - host: authentik.domain.tld
paths: paths:
- path: "/" - path: "/"
pathType: Prefix pathType: Prefix
postgresql: postgresql:
enabled: true enabled: true
postgresqlPassword: "ThisIsNotASecurePassword" postgresqlPassword: "ThisIsNotASecurePassword"
redis: redis:
enabled: true enabled: true
``` ```
See all configurable values on [artifacthub](https://artifacthub.io/packages/helm/goauthentik/authentik). See all configurable values on [artifacthub](https://artifacthub.io/packages/helm/goauthentik/authentik).

View file

@ -6,19 +6,23 @@ The user interface can be customized through attributes, and will be inherited f
The following features can be enabled/disabled. By default, all of them are enabled: The following features can be enabled/disabled. By default, all of them are enabled:
- `settings.enabledFeatures.apiDrawer` - `settings.enabledFeatures.apiDrawer`
API Request drawer in navbar API Request drawer in navbar
- `settings.enabledFeatures.notificationDrawer`
- `settings.enabledFeatures.notificationDrawer`
Notification drawer in navbar Notification drawer in navbar
- `settings.enabledFeatures.settings`
- `settings.enabledFeatures.settings`
Settings link in navbar Settings link in navbar
- `settings.enabledFeatures.applicationEdit`
- `settings.enabledFeatures.applicationEdit`
Application edit in library (only shown when user is superuser) Application edit in library (only shown when user is superuser)
- `settings.enabledFeatures.search`
- `settings.enabledFeatures.search`
Search bar Search bar
@ -34,13 +38,13 @@ Optional CSS which is applied in the background of the background of the user in
```yaml ```yaml
settings: settings:
theme: theme:
background: > background: >
background: url('https://picsum.photos/1920/1080'); background: url('https://picsum.photos/1920/1080');
filter: blur(8px); filter: blur(8px);
background-position: center; background-position: center;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: cover; background-size: cover;
``` ```
### `settings.layout.type` ### `settings.layout.type`

View file

@ -10,15 +10,15 @@ Upon creation, a service account and a token is generated. The service account o
authentik can manage the deployment, updating and general lifecycle of an Outpost. To communicate with the underlying platforms on which the outpost is deployed, authentik has several built-in integrations. authentik can manage the deployment, updating and general lifecycle of an Outpost. To communicate with the underlying platforms on which the outpost is deployed, authentik has several built-in integrations.
- If you've deployed authentik on docker-compose, authentik automatically creates an integration for the local docker socket (See [Docker](./integrations/docker.md)). - If you've deployed authentik on docker-compose, authentik automatically creates an integration for the local docker socket (See [Docker](./integrations/docker.md)).
- If you've deployed authentik on Kubernetes, with `kubernetesIntegration` set to true (default), authentik automatically creates an integrations for the local Kubernetes Cluster (See [Kubernetes](./integrations/kubernetes.md)). - If you've deployed authentik on Kubernetes, with `kubernetesIntegration` set to true (default), authentik automatically creates an integrations for the local Kubernetes Cluster (See [Kubernetes](./integrations/kubernetes.md)).
To deploy an outpost with these integrations, simply select them during the creation of an Outpost. A background task is started, which creates the container/deployment. You can see that Status on the System Tasks page. To deploy an outpost with these integrations, simply select them during the creation of an Outpost. A background task is started, which creates the container/deployment. You can see that Status on the System Tasks page.
To deploy an outpost manually, see: To deploy an outpost manually, see:
- [Kubernetes](./manual-deploy-kubernetes.md) - [Kubernetes](./manual-deploy-kubernetes.md)
- [docker-compose](./manual-deploy-docker-compose.md) - [docker-compose](./manual-deploy-docker-compose.md)
## Configuration ## Configuration

View file

@ -8,37 +8,37 @@ This integration has the advantage over manual deployments of automatic updates
The following outpost settings are used: The following outpost settings are used:
- `object_naming_template`: Configures how the container is called - `object_naming_template`: Configures how the container is called
- `container_image`: Optionally overwrites the standard container image (see [Configuration](../../installation/configuration.md) to configure the global default) - `container_image`: Optionally overwrites the standard container image (see [Configuration](../../installation/configuration.md) to configure the global default)
- `docker_network`: The docker network the container should be added to. This needs to be modified if you plan to connect to authentik using the internal hostname. - `docker_network`: The docker network the container should be added to. This needs to be modified if you plan to connect to authentik using the internal hostname.
- `docker_map_ports`: Enable/disable the mapping of ports. When using a proxy outpost with traefik for example, you might not want to bind ports as they are routed through traefik. - `docker_map_ports`: Enable/disable the mapping of ports. When using a proxy outpost with traefik for example, you might not want to bind ports as they are routed through traefik.
- `docker_labels`: Optional additional labels that can be applied to the container. - `docker_labels`: Optional additional labels that can be applied to the container.
The container is created with the following hardcoded properties: The container is created with the following hardcoded properties:
- Labels - Labels
- `io.goauthentik.outpost-uuid`: Used by authentik to identify the container, and to allow for name changes. - `io.goauthentik.outpost-uuid`: Used by authentik to identify the container, and to allow for name changes.
Additionally, the proxy outposts have the following extra labels to add themselves into traefik automatically. Additionally, the proxy outposts have the following extra labels to add themselves into traefik automatically.
- `traefik.enable`: "true" - `traefik.enable`: "true"
- `traefik.http.routers.ak-outpost-<outpost-name>-router.rule`: `Host(...)` - `traefik.http.routers.ak-outpost-<outpost-name>-router.rule`: `Host(...)`
- `traefik.http.routers.ak-outpost-<outpost-name>-router.service`: `ak-outpost-<outpost-name>-service` - `traefik.http.routers.ak-outpost-<outpost-name>-router.service`: `ak-outpost-<outpost-name>-service`
- `traefik.http.routers.ak-outpost-<outpost-name>-router.tls`: "true" - `traefik.http.routers.ak-outpost-<outpost-name>-router.tls`: "true"
- `traefik.http.services.ak-outpost-<outpost-name>-service.loadbalancer.healthcheck.path`: "/outpost.goauthentik.io/ping" - `traefik.http.services.ak-outpost-<outpost-name>-service.loadbalancer.healthcheck.path`: "/outpost.goauthentik.io/ping"
- `traefik.http.services.ak-outpost-<outpost-name>-service.loadbalancer.healthcheck.port`: "9300" - `traefik.http.services.ak-outpost-<outpost-name>-service.loadbalancer.healthcheck.port`: "9300"
- `traefik.http.services.ak-outpost-<outpost-name>-service.loadbalancer.server.port`: "9000" - `traefik.http.services.ak-outpost-<outpost-name>-service.loadbalancer.server.port`: "9000"
## Permissions ## Permissions
To minimise the potential risks of mapping the docker socket into a container/giving an application access to the docker API, many people use Projects like [docker-socket-proxy](https://github.com/Tecnativa/docker-socket-proxy). authentik requires these permissions from the docker API: To minimise the potential risks of mapping the docker socket into a container/giving an application access to the docker API, many people use Projects like [docker-socket-proxy](https://github.com/Tecnativa/docker-socket-proxy). authentik requires these permissions from the docker API:
- Images/Pull: authentik tries to pre-pull the custom image if one is configured, otherwise falling back to the default image. - Images/Pull: authentik tries to pre-pull the custom image if one is configured, otherwise falling back to the default image.
- Containers/Read: Gather infos about currently running container - Containers/Read: Gather infos about currently running container
- Containers/Create: Create new containers - Containers/Create: Create new containers
- Containers/Kill: Cleanup during upgrades - Containers/Kill: Cleanup during upgrades
- Containers/Remove: Removal of outposts - Containers/Remove: Removal of outposts
## Remote hosts (TLS) ## Remote hosts (TLS)
@ -46,10 +46,10 @@ To connect remote hosts, you can follow this Guide from Docker [Use TLS (HTTPS)
Afterwards, create two Certificate-keypairs in authentik: Afterwards, create two Certificate-keypairs in authentik:
- `Docker CA`, with the contents of `~/.docker/ca.pem` as Certificate - `Docker CA`, with the contents of `~/.docker/ca.pem` as Certificate
- `Docker Cert`, with the contents of `~/.docker/cert.pem` as Certificate and `~/.docker/key.pem` as Private key. - `Docker Cert`, with the contents of `~/.docker/cert.pem` as Certificate and `~/.docker/key.pem` as Private key.
Create an integration with `Docker CA` as *TLS Verification Certificate* and `Docker Cert` as *TLS Authentication Certificate*. Create an integration with `Docker CA` as _TLS Verification Certificate_ and `Docker Cert` as _TLS Authentication Certificate_.
## Remote hosts (SSH) ## Remote hosts (SSH)
@ -65,10 +65,10 @@ openssl req -x509 -sha256 -nodes -days 365 -out certificate.pem -key authentik
You'll end up with three files: You'll end up with three files:
- `authentik.pub` is the public key, this should be added to the `~/.ssh/authorized_keys` file on the target host and user. - `authentik.pub` is the public key, this should be added to the `~/.ssh/authorized_keys` file on the target host and user.
- `authentik` is the private key, which should be imported into a Keypair in authentik. - `authentik` is the private key, which should be imported into a Keypair in authentik.
- `certificate.pem` is the matching certificate for the keypair above. - `certificate.pem` is the matching certificate for the keypair above.
Modify/create a new Docker integration, and set your *Docker URL* to `ssh://hostname`, and select the keypair you created above as *TLS Authentication Certificate/SSH Keypair*. Modify/create a new Docker integration, and set your _Docker URL_ to `ssh://hostname`, and select the keypair you created above as _TLS Authentication Certificate/SSH Keypair_.
The *Docker URL* field include a user, if none is specified authentik connects with the user `authentik`. The _Docker URL_ field include a user, if none is specified authentik connects with the user `authentik`.

View file

@ -8,30 +8,30 @@ This integration has the advantage over manual deployments of automatic updates
This integration creates the following objects: This integration creates the following objects:
- Deployment for the outpost container - Deployment for the outpost container
- Service - Service
- Secret to store the token - Secret to store the token
- Prometheus ServiceMonitor (if the Prometheus Operator is installed in the target cluster) - Prometheus ServiceMonitor (if the Prometheus Operator is installed in the target cluster)
- Ingress (only Proxy outposts) - Ingress (only Proxy outposts)
- Traefik Middleware (only Proxy outposts with forward auth enabled) - Traefik Middleware (only Proxy outposts with forward auth enabled)
The following outpost settings are used: The following outpost settings are used:
- `object_naming_template`: Configures how the container is called - `object_naming_template`: Configures how the container is called
- `container_image`: Optionally overwrites the standard container image (see [Configuration](../../installation/configuration.md) to configure the global default) - `container_image`: Optionally overwrites the standard container image (see [Configuration](../../installation/configuration.md) to configure the global default)
- `kubernetes_replicas`: Replica count for the deployment of the outpost - `kubernetes_replicas`: Replica count for the deployment of the outpost
- `kubernetes_namespace`: Namespace to deploy in, defaults to the same namespace authentik is deployed in (if available) - `kubernetes_namespace`: Namespace to deploy in, defaults to the same namespace authentik is deployed in (if available)
- `kubernetes_ingress_annotations`: Any additional annotations to add to the ingress object, for example cert-manager - `kubernetes_ingress_annotations`: Any additional annotations to add to the ingress object, for example cert-manager
- `kubernetes_ingress_secret_name`: Name of the secret that is used for TLS connections - `kubernetes_ingress_secret_name`: Name of the secret that is used for TLS connections
- `kubernetes_service_type`: Service kind created, can be set to LoadBalancer for LDAP outposts for example - `kubernetes_service_type`: Service kind created, can be set to LoadBalancer for LDAP outposts for example
- `kubernetes_disabled_components`: Disable any components of the kubernetes integration, can be any of - `kubernetes_disabled_components`: Disable any components of the kubernetes integration, can be any of
- 'secret' - 'secret'
- 'deployment' - 'deployment'
- 'service' - 'service'
- 'prometheus servicemonitor' - 'prometheus servicemonitor'
- 'ingress' - 'ingress'
- 'traefik middleware' - 'traefik middleware'
- `kubernetes_image_pull_secrets`: If the above docker image is in a private repository, use these secrets to pull. - `kubernetes_image_pull_secrets`: If the above docker image is in a private repository, use these secrets to pull.
NOTE: The secret must be created manually in the namespace first. NOTE: The secret must be created manually in the namespace first.

View file

@ -12,25 +12,25 @@ You can also run the outpost in a separate docker-compose project, you just have
version: "3.5" version: "3.5"
services: services:
authentik_proxy: authentik_proxy:
image: ghcr.io/goauthentik/proxy image: ghcr.io/goauthentik/proxy
# Optionally specify which networks the container should be # Optionally specify which networks the container should be
# might be needed to reach the core authentik server # might be needed to reach the core authentik server
# networks: # networks:
# - foo # - foo
ports: ports:
- 4180:4180 - 4180:4180
- 4443:4443 - 4443:4443
# Starting in authentik 2021.9, use the ports below # Starting in authentik 2021.9, use the ports below
# - 9000:9000 # - 9000:9000
# - 9443:9443 # - 9443:9443
environment: environment:
AUTHENTIK_HOST: https://your-authentik.tld AUTHENTIK_HOST: https://your-authentik.tld
AUTHENTIK_INSECURE: "false" AUTHENTIK_INSECURE: "false"
AUTHENTIK_TOKEN: token-generated-by-authentik AUTHENTIK_TOKEN: token-generated-by-authentik
# Starting with 2021.9, you can optionally set this too # Starting with 2021.9, you can optionally set this too
# when authentik_host for internal communication doesn't match the public URL # when authentik_host for internal communication doesn't match the public URL
# AUTHENTIK_HOST_BROWSER: https://external-domain.tld # AUTHENTIK_HOST_BROWSER: https://external-domain.tld
``` ```
### LDAP outpost ### LDAP outpost
@ -39,17 +39,17 @@ services:
version: "3.5" version: "3.5"
services: services:
authentik_ldap: authentik_ldap:
image: ghcr.io/goauthentik/ldap image: ghcr.io/goauthentik/ldap
# Optionally specify which networks the container should be # Optionally specify which networks the container should be
# might be needed to reach the core authentik server # might be needed to reach the core authentik server
# networks: # networks:
# - foo # - foo
ports: ports:
- 389:3389 - 389:3389
- 636:6636 - 636:6636
environment: environment:
AUTHENTIK_HOST: https://your-authentik.tld AUTHENTIK_HOST: https://your-authentik.tld
AUTHENTIK_INSECURE: "false" AUTHENTIK_INSECURE: "false"
AUTHENTIK_TOKEN: token-generated-by-authentik AUTHENTIK_TOKEN: token-generated-by-authentik
``` ```

View file

@ -3,13 +3,17 @@ title: Expression Policies
--- ---
The passing of the policy is determined by the return value of the code. Use The passing of the policy is determined by the return value of the code. Use
```python ```python
return True return True
``` ```
to pass a policy and to pass a policy and
```python ```python
return False return False
``` ```
to fail it. to fail it.
## Available Functions ## Available Functions
@ -31,10 +35,10 @@ Check if a user has any authenticator devices. Only fully validated devices are
Optionally, you can filter a specific device type. The following options are valid: Optionally, you can filter a specific device type. The following options are valid:
- `totp` - `totp`
- `duo` - `duo`
- `static` - `static`
- `webauthn` - `webauthn`
Example: Example:
@ -44,7 +48,7 @@ return ak_user_has_authenticator(request.user)
### `ak_call_policy(name: str, **kwargs) -> PolicyResult` (2021.12+) ### `ak_call_policy(name: str, **kwargs) -> PolicyResult` (2021.12+)
Call another policy with the name *name*. Current request is passed to policy. Key-word arguments Call another policy with the name _name_. Current request is passed to policy. Key-word arguments
can be used to modify the request's context. can be used to modify the request's context.
Example: Example:
@ -59,24 +63,24 @@ result = ak_call_policy("test-policy-2", foo="bar")
return result.passing return result.passing
``` ```
import Functions from '../expressions/_functions.md' import Functions from "../expressions/_functions.md";
<Functions /> <Functions />
## Variables ## Variables
import Objects from '../expressions/_objects.md' import Objects from "../expressions/_objects.md";
<Objects /> <Objects />
- `request`: A PolicyRequest object, which has the following properties: - `request`: A PolicyRequest object, which has the following properties:
- `request.user`: The current user, against which the policy is applied. See [User](../user-group/user.md#object-attributes) - `request.user`: The current user, against which the policy is applied. See [User](../user-group/user.md#object-attributes)
- `request.http_request`: The Django HTTP Request. See ([Django documentation](https://docs.djangoproject.com/en/3.0/ref/request-response/#httprequest-objects)) - `request.http_request`: The Django HTTP Request. See ([Django documentation](https://docs.djangoproject.com/en/3.0/ref/request-response/#httprequest-objects))
- `request.obj`: A Django Model instance. This is only set if the policy is ran against an object. - `request.obj`: A Django Model instance. This is only set if the policy is ran against an object.
- `request.context`: A dictionary with dynamic data. This depends on the origin of the execution. - `request.context`: A dictionary with dynamic data. This depends on the origin of the execution.
- `geoip`: GeoIP object, which is added when GeoIP is enabled. See [GeoIP](https://geoip2.readthedocs.io/en/latest/#geoip2.models.City) - `geoip`: GeoIP object, which is added when GeoIP is enabled. See [GeoIP](https://geoip2.readthedocs.io/en/latest/#geoip2.models.City)
- `ak_is_sso_flow`: Boolean which is true if request was initiated by authenticating through an external provider. - `ak_is_sso_flow`: Boolean which is true if request was initiated by authenticating through an external provider.
- `ak_client_ip`: Client's IP Address or 255.255.255.255 if no IP Address could be extracted. Can be [compared](#comparing-ip-addresses), for example - `ak_client_ip`: Client's IP Address or 255.255.255.255 if no IP Address could be extracted. Can be [compared](#comparing-ip-addresses), for example
```python ```python
return ak_client_ip in ip_network('10.0.0.0/24') return ak_client_ip in ip_network('10.0.0.0/24')
@ -90,19 +94,20 @@ Additionally, when the policy is executed from a flow, every variable from the f
This includes the following: This includes the following:
- `context['prompt_data']`: Data which has been saved from a prompt stage or an external source. - `context['prompt_data']`: Data which has been saved from a prompt stage or an external source.
- `context['application']`: The application the user is in the process of authorizing. - `context['application']`: The application the user is in the process of authorizing.
- `context['pending_user']`: The currently pending user, see [User](../user-group/user.md#object-attributes) - `context['pending_user']`: The currently pending user, see [User](../user-group/user.md#object-attributes)
- `context['auth_method']`: Authentication method set (this value is set by password stages) - `context['auth_method']`: Authentication method set (this value is set by password stages)
Depending on method, `context['auth_method_args']` is also set. Depending on method, `context['auth_method_args']` is also set.
Can be any of: Can be any of:
- `password`: Standard password login - `password`: Standard password login
- `app_password`: App password (token) - `app_password`: App password (token)
Sets `context['auth_method_args']` to Sets `context['auth_method_args']` to
```json ```json
{ {
"token": { "token": {
@ -113,9 +118,11 @@ This includes the following:
} }
} }
``` ```
- `ldap`: LDAP bind authentication
- `ldap`: LDAP bind authentication
Sets `context['auth_method_args']` to Sets `context['auth_method_args']` to
```json ```json
{ {
"source": {} // Information about the source used "source": {} // Information about the source used

View file

@ -23,11 +23,11 @@ This policy can enforce regular password rotation by expiring set passwords afte
This policy allows you to specify password rules, such as length and required characters. This policy allows you to specify password rules, such as length and required characters.
The following rules can be set: The following rules can be set:
- Minimum amount of uppercase characters. - Minimum amount of uppercase characters.
- Minimum amount of lowercase characters. - Minimum amount of lowercase characters.
- Minimum amount of symbols characters. - Minimum amount of symbols characters.
- Minimum length. - Minimum length.
- Symbol charset (define which characters are counted as symbols). - Symbol charset (define which characters are counted as symbols).
## Reputation Policy ## Reputation Policy

View file

@ -4,22 +4,21 @@ title: Expressions
The property mapping should return a value that is expected by the Provider/Source. Supported types are documented in the individual Provider/Source. Returning `None` is always accepted and would simply skip the mapping for which `None` was returned. The property mapping should return a value that is expected by the Provider/Source. Supported types are documented in the individual Provider/Source. Returning `None` is always accepted and would simply skip the mapping for which `None` was returned.
## Available Functions ## Available Functions
import Functions from '../expressions/_functions.md' import Functions from "../expressions/_functions.md";
<Functions /> <Functions />
## Variables ## Variables
import Objects from '../expressions/_objects.md' import Objects from "../expressions/_objects.md";
<Objects /> <Objects />
import User from '../expressions/_user.md' import User from "../expressions/_user.md";
<User /> <User />
- `request`: The current request. This may be `None` if there is no contextual request. See ([Django documentation](https://docs.djangoproject.com/en/3.0/ref/request-response/#httprequest-objects)) - `request`: The current request. This may be `None` if there is no contextual request. See ([Django documentation](https://docs.djangoproject.com/en/3.0/ref/request-response/#httprequest-objects))
- Other arbitrary arguments given by the provider, this is documented on the Provider/Source. - Other arbitrary arguments given by the provider, this is documented on the Provider/Source.

View file

@ -12,14 +12,14 @@ SAML Property Mappings allow you embed information into the SAML AuthN request.
LDAP Property Mappings are used when you define a LDAP Source. These mappings define which LDAP property maps to which authentik property. By default, the following mappings are created: LDAP Property Mappings are used when you define a LDAP Source. These mappings define which LDAP property maps to which authentik property. By default, the following mappings are created:
- authentik default Active Directory Mapping: givenName - authentik default Active Directory Mapping: givenName
- authentik default Active Directory Mapping: sAMAccountName - authentik default Active Directory Mapping: sAMAccountName
- authentik default Active Directory Mapping: sn - authentik default Active Directory Mapping: sn
- authentik default Active Directory Mapping: userPrincipalName - authentik default Active Directory Mapping: userPrincipalName
- authentik default LDAP Mapping: mail - authentik default LDAP Mapping: mail
- authentik default LDAP Mapping: Name - authentik default LDAP Mapping: Name
- authentik default OpenLDAP Mapping: cn - authentik default OpenLDAP Mapping: cn
- authentik default OpenLDAP Mapping: uid - authentik default OpenLDAP Mapping: uid
These are configured with most common LDAP setups. These are configured with most common LDAP setups.

View file

@ -35,29 +35,29 @@ ldapsearch \
The following fields are currently sent for users: The following fields are currently sent for users:
- `cn`: User's username - `cn`: User's username
- `uid`: Unique user identifier - `uid`: Unique user identifier
- `uidNumber`: A unique numeric identifier for the user - `uidNumber`: A unique numeric identifier for the user
- `name`: User's name - `name`: User's name
- `displayName`: User's name - `displayName`: User's name
- `mail`: User's email address - `mail`: User's email address
- `objectClass`: A list of these strings: - `objectClass`: A list of these strings:
- "user" - "user"
- "organizationalPerson" - "organizationalPerson"
- "goauthentik.io/ldap/user" - "goauthentik.io/ldap/user"
- `memberOf`: A list of all DNs that the user is a member of - `memberOf`: A list of all DNs that the user is a member of
- `goauthentik.io/ldap/active`: "true" if the account is active, otherwise "false" - `goauthentik.io/ldap/active`: "true" if the account is active, otherwise "false"
- `goauthentik.io/ldap/superuser`: "true" if the account is part of a group with superuser permissions, otherwise "false" - `goauthentik.io/ldap/superuser`: "true" if the account is part of a group with superuser permissions, otherwise "false"
The following fields are current set for groups: The following fields are current set for groups:
- `cn`: The group's name - `cn`: The group's name
- `uid`: Unique group identifier - `uid`: Unique group identifier
- `gidNumber`: A unique numeric identifier for the group - `gidNumber`: A unique numeric identifier for the group
- `member`: A list of all DNs of the groups members - `member`: A list of all DNs of the groups members
- `objectClass`: A list of these strings: - `objectClass`: A list of these strings:
- "group" - "group"
- "goauthentik.io/ldap/group" - "goauthentik.io/ldap/group"
A virtual group is also created for each user, they have the same fields as groups but have an additional objectClass: `goauthentik.io/ldap/virtual-group`. A virtual group is also created for each user, they have the same fields as groups but have an additional objectClass: `goauthentik.io/ldap/virtual-group`.
The virtual groups gidNumber is equal to the uidNumber of the user. The virtual groups gidNumber is equal to the uidNumber of the user.
@ -85,11 +85,11 @@ All bind modes rely on flows.
The following stages are supported: The following stages are supported:
- [Identification](../flow/stages/identification/) - [Identification](../flow/stages/identification/)
- [Password](../flow/stages/password/) - [Password](../flow/stages/password/)
- [Authenticator validation](../flow/stages/authenticator_validate/) - [Authenticator validation](../flow/stages/authenticator_validate/)
Note: Authenticator validation currently only supports DUO devices Note: Authenticator validation currently only supports DUO devices
#### Direct bind #### Direct bind
@ -97,7 +97,7 @@ In this mode, the outpost will always execute the configured flow when a new bin
#### Cached bind #### Cached bind
This mode uses the same logic as direct bind, however the result is cached for the entered credentials, and saved in memory for the standard session duration. Sessions are saved independently, meaning that revoking sessions does *not* remove them from the outpost, and neither will changing a users credentials. This mode uses the same logic as direct bind, however the result is cached for the entered credentials, and saved in memory for the standard session duration. Sessions are saved independently, meaning that revoking sessions does _not_ remove them from the outpost, and neither will changing a users credentials.
## Search Modes ## Search Modes

View file

@ -6,7 +6,7 @@ Note that authentik does treat a grant type of `password` the same as `client_cr
### Static authentication ### Static authentication
Hence identification is based on service-accounts, and authentication is based on App-password tokens. These objects can be created in a single step using the *Create Service account* function. Hence identification is based on service-accounts, and authentication is based on App-password tokens. These objects can be created in a single step using the _Create Service account_ function.
An example request can look like this: An example request can look like this:
@ -29,7 +29,7 @@ Starting with authentik 2022.4, you can authenticate and get a token using an ex
(For readability we will refer to the JWT issued by the external issuer/platform as input JWT, and the resulting JWT from authentik as the output JWT) (For readability we will refer to the JWT issued by the external issuer/platform as input JWT, and the resulting JWT from authentik as the output JWT)
To configure this, the certificate used to sign the input JWT must be created in authentik. The certificate is enough, a private key is not required. Afterwards, configure the certificate in the OAuth2 provider settings under *Verification certificates*. To configure this, the certificate used to sign the input JWT must be created in authentik. The certificate is enough, a private key is not required. Afterwards, configure the certificate in the OAuth2 provider settings under _Verification certificates_.
With this configure, any JWT issued by the configured certificates can be used to authenticate: With this configure, any JWT issued by the configured certificates can be used to authenticate:
@ -46,9 +46,9 @@ client_id=application_client_id
Alternatively, you can set the `client_secret` parameter to the `$inputJWT`, for applications which can set the password from a file but not other parameters. Alternatively, you can set the `client_secret` parameter to the `$inputJWT`, for applications which can set the password from a file but not other parameters.
Input JWTs are checked to be signed by any of the selected *Verification certificates*, and their `exp` attribute must not be now or in the past. Input JWTs are checked to be signed by any of the selected _Verification certificates_, and their `exp` attribute must not be now or in the past.
To do additional checks, you can use *[Expression policies](../../policies/expression)*: To do additional checks, you can use _[Expression policies](../../policies/expression)_:
```python ```python
return request.context["oauth_jwt"]["iss"] == "https://my.issuer" return request.context["oauth_jwt"]["iss"] == "https://my.issuer"

View file

@ -4,18 +4,18 @@ Create a new ingress for the outpost
apiVersion: networking.k8s.io/v1beta1 apiVersion: networking.k8s.io/v1beta1
kind: Ingress kind: Ingress
metadata: metadata:
name: authentik-outpost name: authentik-outpost
spec: spec:
rules: rules:
- host: app.company - host: app.company
http: http:
paths: paths:
- backend: - backend:
# Or, to use an external Outpost, create an ExternalName service and reference that here. # Or, to use an external Outpost, create an ExternalName service and reference that here.
# See https://kubernetes.io/docs/concepts/services-networking/service/#externalname # See https://kubernetes.io/docs/concepts/services-networking/service/#externalname
serviceName: ak-outpost-example-outpost serviceName: ak-outpost-example-outpost
servicePort: 9000 servicePort: 9000
path: /outpost.goauthentik.io path: /outpost.goauthentik.io
``` ```
This ingress handles authentication requests, and the sign-in flow. This ingress handles authentication requests, and the sign-in flow.
@ -24,14 +24,14 @@ Add these annotations to the ingress you want to protect
```yaml ```yaml
metadata: metadata:
annotations: annotations:
nginx.ingress.kubernetes.io/auth-url: |- nginx.ingress.kubernetes.io/auth-url: |-
http://outpost.company:9000/outpost.goauthentik.io/auth/nginx http://outpost.company:9000/outpost.goauthentik.io/auth/nginx
# If you're using domain-level auth, use the authentication URL instead of the application URL # If you're using domain-level auth, use the authentication URL instead of the application URL
nginx.ingress.kubernetes.io/auth-signin: |- nginx.ingress.kubernetes.io/auth-signin: |-
https://app.company/outpost.goauthentik.io/start?rd=$escaped_request_uri https://app.company/outpost.goauthentik.io/start?rd=$escaped_request_uri
nginx.ingress.kubernetes.io/auth-response-headers: |- nginx.ingress.kubernetes.io/auth-response-headers: |-
Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email,X-authentik-name,X-authentik-uid Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email,X-authentik-name,X-authentik-uid
nginx.ingress.kubernetes.io/auth-snippet: | nginx.ingress.kubernetes.io/auth-snippet: |
proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Host $http_host;
``` ```

View file

@ -1,4 +1,3 @@
``` ```
server { server {
# SSL and VHost configuration # SSL and VHost configuration

View file

@ -1,47 +1,46 @@
```yaml ```yaml
version: '3.7' version: "3.7"
services: services:
traefik: traefik:
image: traefik:v2.2 image: traefik:v2.2
container_name: traefik container_name: traefik
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock
ports: ports:
- 80:80 - 80:80
command: command:
- '--api' - "--api"
- '--providers.docker=true' - "--providers.docker=true"
- '--providers.docker.exposedByDefault=false' - "--providers.docker.exposedByDefault=false"
- "--entrypoints.web.address=:80" - "--entrypoints.web.address=:80"
authentik-proxy: authentik-proxy:
image: ghcr.io/goauthentik/proxy image: ghcr.io/goauthentik/proxy
ports: ports:
- 9000:9000 - 9000:9000
- 9443:9443 - 9443:9443
environment: environment:
AUTHENTIK_HOST: https://your-authentik.tld AUTHENTIK_HOST: https://your-authentik.tld
AUTHENTIK_INSECURE: "false" AUTHENTIK_INSECURE: "false"
AUTHENTIK_TOKEN: token-generated-by-authentik AUTHENTIK_TOKEN: token-generated-by-authentik
# Starting with 2021.9, you can optionally set this too # Starting with 2021.9, you can optionally set this too
# when authentik_host for internal communication doesn't match the public URL # when authentik_host for internal communication doesn't match the public URL
# AUTHENTIK_HOST_BROWSER: https://external-domain.tld # AUTHENTIK_HOST_BROWSER: https://external-domain.tld
labels: labels:
traefik.enable: true traefik.enable: true
traefik.port: 9000 traefik.port: 9000
traefik.http.routers.authentik.rule: Host(`app.company`) && PathPrefix(`/outpost.goauthentik.io/`) traefik.http.routers.authentik.rule: Host(`app.company`) && PathPrefix(`/outpost.goauthentik.io/`)
# `authentik-proxy` refers to the service name in the compose file. # `authentik-proxy` refers to the service name in the compose file.
traefik.http.middlewares.authentik.forwardauth.address: http://authentik-proxy:9000/outpost.goauthentik.io/auth/traefik traefik.http.middlewares.authentik.forwardauth.address: http://authentik-proxy:9000/outpost.goauthentik.io/auth/traefik
traefik.http.middlewares.authentik.forwardauth.trustForwardHeader: true traefik.http.middlewares.authentik.forwardauth.trustForwardHeader: true
traefik.http.middlewares.authentik.forwardauth.authResponseHeaders: X-authentik-username,X-authentik-groups,X-authentik-email,X-authentik-name,X-authentik-uid,X-authentik-jwt,X-authentik-meta-jwks,X-authentik-meta-outpost,X-authentik-meta-provider,X-authentik-meta-app,X-authentik-meta-version traefik.http.middlewares.authentik.forwardauth.authResponseHeaders: X-authentik-username,X-authentik-groups,X-authentik-email,X-authentik-name,X-authentik-uid,X-authentik-jwt,X-authentik-meta-jwks,X-authentik-meta-outpost,X-authentik-meta-provider,X-authentik-meta-app,X-authentik-meta-version
restart: unless-stopped restart: unless-stopped
whoami: whoami:
image: containous/whoami image: containous/whoami
labels: labels:
traefik.enable: true traefik.enable: true
traefik.http.routers.whoami.rule: Host(`app.company`) traefik.http.routers.whoami.rule: Host(`app.company`)
traefik.http.routers.whoami.middlewares: authentik@docker traefik.http.routers.whoami.middlewares: authentik@docker
restart: unless-stopped restart: unless-stopped
``` ```

View file

@ -4,23 +4,23 @@ Create a middleware:
apiVersion: traefik.containo.us/v1alpha1 apiVersion: traefik.containo.us/v1alpha1
kind: Middleware kind: Middleware
metadata: metadata:
name: authentik name: authentik
spec: spec:
forwardAuth: forwardAuth:
address: http://outpost.company:9000/outpost.goauthentik.io/auth/traefik address: http://outpost.company:9000/outpost.goauthentik.io/auth/traefik
trustForwardHeader: true trustForwardHeader: true
authResponseHeaders: authResponseHeaders:
- X-authentik-username - X-authentik-username
- X-authentik-groups - X-authentik-groups
- X-authentik-email - X-authentik-email
- X-authentik-name - X-authentik-name
- X-authentik-uid - X-authentik-uid
- X-authentik-jwt - X-authentik-jwt
- X-authentik-meta-jwks - X-authentik-meta-jwks
- X-authentik-meta-outpost - X-authentik-meta-outpost
- X-authentik-meta-provider - X-authentik-meta-provider
- X-authentik-meta-app - X-authentik-meta-app
- X-authentik-meta-version - X-authentik-meta-version
``` ```
Add the following settings to your IngressRoute Add the following settings to your IngressRoute
@ -31,22 +31,22 @@ See [here](https://doc.traefik.io/traefik/v2.4/providers/kubernetes-crd/#allowcr
```yaml ```yaml
spec: spec:
routes: routes:
- kind: Rule - kind: Rule
match: "Host(`app.company`)" match: "Host(`app.company`)"
middlewares: middlewares:
- name: authentik - name: authentik
namespace: authentik namespace: authentik
priority: 10 priority: 10
services: # Unchanged services: # Unchanged
# This part is only required for single-app setups # This part is only required for single-app setups
- kind: Rule - kind: Rule
match: "Host(`app.company`) && PathPrefix(`/outpost.goauthentik.io/`)" match: "Host(`app.company`) && PathPrefix(`/outpost.goauthentik.io/`)"
priority: 15 priority: 15
services: services:
- kind: Service - kind: Service
# Or, to use an external Outpost, create an ExternalName service and reference that here. # Or, to use an external Outpost, create an ExternalName service and reference that here.
# See https://kubernetes.io/docs/concepts/services-networking/service/#externalname # See https://kubernetes.io/docs/concepts/services-networking/service/#externalname
name: ak-outpost-example-outpost name: ak-outpost-example-outpost
port: 9000 port: 9000
``` ```

View file

@ -1,31 +1,31 @@
```yaml ```yaml
http: http:
middlewares: middlewares:
authentik: authentik:
forwardAuth: forwardAuth:
address: http://outpost.company:9000/outpost.goauthentik.io/auth/traefik address: http://outpost.company:9000/outpost.goauthentik.io/auth/traefik
trustForwardHeader: true trustForwardHeader: true
authResponseHeaders: authResponseHeaders:
- X-authentik-username - X-authentik-username
- X-authentik-groups - X-authentik-groups
- X-authentik-email - X-authentik-email
- X-authentik-name - X-authentik-name
- X-authentik-uid - X-authentik-uid
- X-authentik-jwt - X-authentik-jwt
- X-authentik-meta-jwks - X-authentik-meta-jwks
- X-authentik-meta-outpost - X-authentik-meta-outpost
- X-authentik-meta-provider - X-authentik-meta-provider
- X-authentik-meta-app - X-authentik-meta-app
- X-authentik-meta-version - X-authentik-meta-version
routers: routers:
default-router: default-router:
rule: "Host(`app.company`)" rule: "Host(`app.company`)"
middlewares: middlewares:
- name: authentik - name: authentik
priority: 10 priority: 10
services: # Unchanged services: # Unchanged
default-router-auth: default-router-auth:
match: "Host(`app.company`) && PathPrefix(`/outpost.goauthentik.io/`)" match: "Host(`app.company`) && PathPrefix(`/outpost.goauthentik.io/`)"
priority: 15 priority: 15
services: http://outpost.company:9000/outpost.goauthentik.io services: http://outpost.company:9000/outpost.goauthentik.io
``` ```

View file

@ -4,8 +4,8 @@ title: Custom headers
The proxy can send custom headers to your upstream application. These can be configured in one of two ways: The proxy can send custom headers to your upstream application. These can be configured in one of two ways:
- Group attributes; this allows for inheritance, but only allows static values - Group attributes; this allows for inheritance, but only allows static values
- Property mappings; this allows for dynamic values - Property mappings; this allows for dynamic values
## Group attributes ## Group attributes

View file

@ -16,11 +16,12 @@ has the advantage that you can still do per-application access policies in authe
## Domain level ## Domain level
To use forward auth instead of proxying, you have to change a couple of settings. To use forward auth instead of proxying, you have to change a couple of settings.
In the Proxy Provider, make sure to use the *Forward auth (domain level)* mode. In the Proxy Provider, make sure to use the _Forward auth (domain level)_ mode.
This mode differs from the *Forward auth (single application)* mode in the following points: This mode differs from the _Forward auth (single application)_ mode in the following points:
- You don't have to configure an application in authentik for each domain
- Users don't have to authorize multiple times - You don't have to configure an application in authentik for each domain
- Users don't have to authorize multiple times
There are however also some downsides, mainly the fact that you **can't** restrict individual There are however also some downsides, mainly the fact that you **can't** restrict individual
applications to different users. applications to different users.
@ -33,16 +34,16 @@ is redirected to the outpost.
For domain level, you'd use the same domain as authentik. For domain level, you'd use the same domain as authentik.
:::info :::info
*example-outpost* is used as a placeholder for the outpost name. _example-outpost_ is used as a placeholder for the outpost name.
*authentik.company* is used as a placeholder for the authentik install. _authentik.company_ is used as a placeholder for the authentik install.
*app.company* is used as a placeholder for the external domain for the application. _app.company_ is used as a placeholder for the external domain for the application.
*outpost.company* is used as a placeholder for the outpost. When using the embedded outpost, this can be the same as *authentik.company* _outpost.company_ is used as a placeholder for the outpost. When using the embedded outpost, this can be the same as _authentik.company_
::: :::
## Nginx ## Nginx
import Tabs from '@theme/Tabs'; import Tabs from "@theme/Tabs";
import TabItem from '@theme/TabItem'; import TabItem from "@theme/TabItem";
<Tabs <Tabs
defaultValue="standalone-nginx" defaultValue="standalone-nginx"
@ -53,21 +54,21 @@ import TabItem from '@theme/TabItem';
]}> ]}>
<TabItem value="standalone-nginx"> <TabItem value="standalone-nginx">
import NginxStandalone from './_nginx_standalone.md' import NginxStandalone from "./_nginx_standalone.md";
<NginxStandalone /> <NginxStandalone />
</TabItem> </TabItem>
<TabItem value="ingress"> <TabItem value="ingress">
import NginxIngress from './_nginx_ingress.md' import NginxIngress from "./_nginx_ingress.md";
<NginxIngress /> <NginxIngress />
</TabItem> </TabItem>
<TabItem value="proxy-manager"> <TabItem value="proxy-manager">
import NginxProxyManager from './_nginx_proxy_manager.md' import NginxProxyManager from "./_nginx_proxy_manager.md";
<NginxProxyManager /> <NginxProxyManager />
@ -85,21 +86,21 @@ import NginxProxyManager from './_nginx_proxy_manager.md'
]}> ]}>
<TabItem value="standalone-traefik"> <TabItem value="standalone-traefik">
import TraefikStandalone from './_traefik_standalone.md' import TraefikStandalone from "./_traefik_standalone.md";
<TraefikStandalone /> <TraefikStandalone />
</TabItem> </TabItem>
<TabItem value="docker-compose"> <TabItem value="docker-compose">
import TraefikCompose from './_traefik_compose.md' import TraefikCompose from "./_traefik_compose.md";
<TraefikCompose /> <TraefikCompose />
</TabItem> </TabItem>
<TabItem value="ingress"> <TabItem value="ingress">
import TraefikIngress from './_traefik_ingress.md' import TraefikIngress from "./_traefik_ingress.md";
<TraefikIngress /> <TraefikIngress />

View file

@ -4,51 +4,51 @@ title: Overview
The proxy outpost sets the following user-specific headers: The proxy outpost sets the following user-specific headers:
- X-authentik-username: `akadmin` - X-authentik-username: `akadmin`
The username of the currently logged in user The username of the currently logged in user
- X-authentik-groups: `foo|bar|baz` - X-authentik-groups: `foo|bar|baz`
The groups the user is member of, separated by a pipe The groups the user is member of, separated by a pipe
- X-authentik-email: `root@localhost` - X-authentik-email: `root@localhost`
The email address of the currently logged in user The email address of the currently logged in user
- X-authentik-name: `authentik Default Admin` - X-authentik-name: `authentik Default Admin`
Full name of the current user Full name of the current user
- X-authentik-uid: `900347b8a29876b45ca6f75722635ecfedf0e931c6022e3a29a8aa13fb5516fb` - X-authentik-uid: `900347b8a29876b45ca6f75722635ecfedf0e931c6022e3a29a8aa13fb5516fb`
The hashed identifier of the currently logged in user. The hashed identifier of the currently logged in user.
Additionally, you can set `additionalHeaders` on groups or users to set additional headers. Additionally, you can set `additionalHeaders` on groups or users to set additional headers.
If you enable *Set HTTP-Basic Authentication* option, the HTTP Authorization header is being set. If you enable _Set HTTP-Basic Authentication_ option, the HTTP Authorization header is being set.
Besides these user-specific headers, some application specific headers are also set: Besides these user-specific headers, some application specific headers are also set:
- X-authentik-meta-outpost: `authentik Embedded Outpost` - X-authentik-meta-outpost: `authentik Embedded Outpost`
The authentik outpost's name. The authentik outpost's name.
- X-authentik-meta-provider: `test` - X-authentik-meta-provider: `test`
The authentik provider's name. The authentik provider's name.
- X-authentik-meta-app: `test` - X-authentik-meta-app: `test`
The authentik application's slug. The authentik application's slug.
- X-authentik-meta-version: `goauthentik.io/outpost/1.2.3` - X-authentik-meta-version: `goauthentik.io/outpost/1.2.3`
The authentik outpost's version. The authentik outpost's version.
### Only in proxy mode ### Only in proxy mode
- X-Forwarded-Host: - X-Forwarded-Host:
The original Host header sent by the client. This is set as the `Host` header is set to the host of the configured backend. The original Host header sent by the client. This is set as the `Host` header is set to the host of the configured backend.
@ -72,7 +72,7 @@ To log out, navigate to `/outpost.goauthentik.io/sign_out`.
## Allowing unauthenticated requests ## Allowing unauthenticated requests
To allow un-authenticated requests to certain paths/URLs, you can use the *Unauthenticated URLs* / *Unauthenticated Paths* field. To allow un-authenticated requests to certain paths/URLs, you can use the _Unauthenticated URLs_ / _Unauthenticated Paths_ field.
Each new line is interpreted as a regular expression, and is compiled and checked using the standard Golang regex parser. Each new line is interpreted as a regular expression, and is compiled and checked using the standard Golang regex parser.
@ -88,7 +88,7 @@ In this mode, the regular expressions are matched against the Request's full URL
## Dynamic backend selection ## Dynamic backend selection
You can configure the backend the proxy should access dynamically via *Scope mappings*. To do so, create a new *Scope mapping*, with a name and scope of your choice. As expression, use this: You can configure the backend the proxy should access dynamically via _Scope mappings_. To do so, create a new _Scope mapping_, with a name and scope of your choice. As expression, use this:
```python ```python
return { return {
@ -98,4 +98,4 @@ return {
} }
``` ```
Afterwards, edit the *Proxy provider* and add this new mapping. The expression is only evaluated when the user logs into the application. Afterwards, edit the _Proxy provider_ and add this new mapping. The expression is only evaluated when the user logs into the application.

View file

@ -5,12 +5,12 @@ title: SAML Provider
This provider allows you to integrate enterprise software using the SAML2 Protocol. It supports signed requests and uses [Property Mappings](../property-mappings/#saml-property-mapping) to determine which fields are exposed and what values they return. This makes it possible to expose vendor-specific fields. This provider allows you to integrate enterprise software using the SAML2 Protocol. It supports signed requests and uses [Property Mappings](../property-mappings/#saml-property-mapping) to determine which fields are exposed and what values they return. This makes it possible to expose vendor-specific fields.
Default fields are exposed through auto-generated Property Mappings, which are prefixed with "authentik default". Default fields are exposed through auto-generated Property Mappings, which are prefixed with "authentik default".
| Endpoint | URL | | Endpoint | URL |
| ---------------------- | -------------------------------------------------------------- | | ---------------------- | ------------------------------------------------------------ |
| SSO (Redirect binding) | `/application/saml/<application slug>/sso/binding/redirect/` | | SSO (Redirect binding) | `/application/saml/<application slug>/sso/binding/redirect/` |
| SSO (POST binding) | `/application/saml/<application slug>/sso/binding/post/` | | SSO (POST binding) | `/application/saml/<application slug>/sso/binding/post/` |
| IdP-initiated login | `/application/saml/<application slug>/sso/binding/init/` | | IdP-initiated login | `/application/saml/<application slug>/sso/binding/init/` |
| Metadata Download | `/api/v3/providers/saml/<provider uid>/metadata/?download/`| | Metadata Download | `/api/v3/providers/saml/<provider uid>/metadata/?download/` |
You can download the metadata through the Webinterface, this link might be handy if your software wants to download the metadata directly. You can download the metadata through the Webinterface, this link might be handy if your software wants to download the metadata directly.
@ -20,8 +20,8 @@ The metadata download link can also be copied with a button on the provider over
You can select a custom SAML Property Mapping after which the NameID field will be generated. If left default, the following checks are done: You can select a custom SAML Property Mapping after which the NameID field will be generated. If left default, the following checks are done:
- When the request asks for `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`, the NameID will be set to the user's email address. - When the request asks for `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`, the NameID will be set to the user's email address.
- When the request asks for `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, the NameID will be set to the hashed user ID. - When the request asks for `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, the NameID will be set to the hashed user ID.
- When the request asks for `urn:oasis:names:tc:SAML:2.0:nameid-format:X509SubjectName`, the NameID will be set to the user's `distinguishedName` attribute. This attribute is set by the LDAP source by default. If the attribute does not exist, it will fall back the persistent identifier. - When the request asks for `urn:oasis:names:tc:SAML:2.0:nameid-format:X509SubjectName`, the NameID will be set to the user's `distinguishedName` attribute. This attribute is set by the LDAP source by default. If the attribute does not exist, it will fall back the persistent identifier.
- When the request asks for `urn:oasis:names:tc:SAML:2.0:nameid-format:WindowsDomainQualifiedName`, the NameID will be set to the user's UPN. This is also set by the LDAP source, and also falls back to the persistent identifier. - When the request asks for `urn:oasis:names:tc:SAML:2.0:nameid-format:WindowsDomainQualifiedName`, the NameID will be set to the user's UPN. This is also set by the LDAP source, and also falls back to the persistent identifier.
- When the request asks for `urn:oasis:names:tc:SAML:2.0:nameid-format:transient`, the NameID will be set based on the user's session ID. - When the request asks for `urn:oasis:names:tc:SAML:2.0:nameid-format:transient`, the NameID will be set based on the user's session ID.

View file

@ -23,6 +23,6 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: xxxx.x.1 tag: xxxx.x.1
``` ```

View file

@ -5,33 +5,33 @@ slug: "0.10"
This update brings a lot of big features, such as: This update brings a lot of big features, such as:
- New OAuth2/OpenID Provider - New OAuth2/OpenID Provider
This new provider merges both OAuth2 and OpenID. It is based on the codebase of the old provider, which has been simplified and cleaned from the ground up. Support for Property Mappings has also been added. Because of this change, OpenID and OAuth2 Providers will have to be re-created. This new provider merges both OAuth2 and OpenID. It is based on the codebase of the old provider, which has been simplified and cleaned from the ground up. Support for Property Mappings has also been added. Because of this change, OpenID and OAuth2 Providers will have to be re-created.
- Proxy Provider - Proxy Provider
Due to this new OAuth2 Provider, the Application Gateway Provider, now simply called "Proxy Provider" has been revamped as well. The new authentik Proxy integrates more tightly with authentik via the new Outposts system. The new proxy also supports multiple applications per proxy instance, can configure TLS based on authentik Keypairs, and more. Due to this new OAuth2 Provider, the Application Gateway Provider, now simply called "Proxy Provider" has been revamped as well. The new authentik Proxy integrates more tightly with authentik via the new Outposts system. The new proxy also supports multiple applications per proxy instance, can configure TLS based on authentik Keypairs, and more.
See [Proxy](../providers/proxy/proxy.md) See [Proxy](../providers/proxy/proxy.md)
- Outpost System - Outpost System
This is a new Object type, currently used only by the Proxy Provider. It manages the creation and permissions of service accounts, which are used by the outposts to communicate with authentik. This is a new Object type, currently used only by the Proxy Provider. It manages the creation and permissions of service accounts, which are used by the outposts to communicate with authentik.
See [Outposts](../outposts/) See [Outposts](../outposts/)
- Flow Import/Export - Flow Import/Export
Flows can now be imported and exported. This feature can be used as a backup system, or to share complex flows with other people. Example flows have also been added to the documentation to help you get going with authentik. Flows can now be imported and exported. This feature can be used as a backup system, or to share complex flows with other people. Example flows have also been added to the documentation to help you get going with authentik.
## Under the hood ## Under the hood
- authentik now runs on Django 3.1 and Channels with complete ASGI enabled - authentik now runs on Django 3.1 and Channels with complete ASGI enabled
- uwsgi has been replaced with Gunicorn and uvicorn - uwsgi has been replaced with Gunicorn and uvicorn
- Elastic APM has been replaced with Sentry Performance metrics - Elastic APM has been replaced with Sentry Performance metrics
- Flow title is now configurable separately from the name - Flow title is now configurable separately from the name
- All logging output is now json - All logging output is now json
## Upgrading ## Upgrading
@ -55,7 +55,7 @@ docker-compose up -d
A few options have changed: A few options have changed:
- `error_reporting` was changed from a simple boolean to a dictionary: - `error_reporting` was changed from a simple boolean to a dictionary:
```yaml ```yaml
error_reporting: error_reporting:
@ -64,8 +64,8 @@ error_reporting:
send_pii: false send_pii: false
``` ```
- The `apm` and `monitoring` blocks have been removed. - The `apm` and `monitoring` blocks have been removed.
- `serverReplicas` and `workerReplicas` have been added - `serverReplicas` and `workerReplicas` have been added
### Upgrading ### Upgrading

View file

@ -5,18 +5,18 @@ slug: "0.11"
This update brings these headline features: This update brings these headline features:
- Add Backup and Restore, currently only externally schedulable, documented [here](https://github.com/goauthentik/authentik/blob/version-2022.1/website/docs/maintenance/backups/index.md) - Add Backup and Restore, currently only externally schedulable, documented [here](https://github.com/goauthentik/authentik/blob/version-2022.1/website/docs/maintenance/backups/index.md)
- New Admin Dashboard with more metrics and Charts - New Admin Dashboard with more metrics and Charts
Shows successful and failed logins from the last 24 hours, as well as the most used applications Shows successful and failed logins from the last 24 hours, as well as the most used applications
- Add search to all table views - Add search to all table views
- Outpost now supports a Docker Controller, which installs the Outpost on the same host as authentik, updates and manages it - Outpost now supports a Docker Controller, which installs the Outpost on the same host as authentik, updates and manages it
- Add Token Identifier - Add Token Identifier
Tokens now have an identifier which is used to reference to them, so the Primary key is not shown in URLs Tokens now have an identifier which is used to reference to them, so the Primary key is not shown in URLs
- `core/applications/list` API now shows applications the user has access to via policies - `core/applications/list` API now shows applications the user has access to via policies
## Upgrading ## Upgrading

View file

@ -5,17 +5,17 @@ slug: "0.12"
This update brings these headline features: This update brings these headline features:
- Rewrite Outpost state Logic, which now supports multiple concurrent Outpost instances. - Rewrite Outpost state Logic, which now supports multiple concurrent Outpost instances.
- Add Kubernetes Integration for Outposts, which deploys and maintains Outposts with High Availability in a Kubernetes Cluster - Add Kubernetes Integration for Outposts, which deploys and maintains Outposts with High Availability in a Kubernetes Cluster
- Add System Task Overview to see all background tasks, their status, the log output, and retry them - Add System Task Overview to see all background tasks, their status, the log output, and retry them
- Alerts now disappear automatically - Alerts now disappear automatically
- Audit Logs are now searchable - Audit Logs are now searchable
- Users can now create their own Tokens to access the API - Users can now create their own Tokens to access the API
- docker-compose deployment now uses traefik 2.3 - docker-compose deployment now uses traefik 2.3
Fixes: Fixes:
- Fix high CPU Usage of the proxy when Websocket connections fail - Fix high CPU Usage of the proxy when Websocket connections fail
## Upgrading ## Upgrading

View file

@ -7,19 +7,19 @@ After a long back and forth, we've finally switched to a more permanent name. Wh
# Headline changes # Headline changes
- New name (https://github.com/goauthentik/authentik/pull/361) - New name (https://github.com/goauthentik/authentik/pull/361)
- The web interface is now a semi-SPA Experience. This means that most operations are done through Asynchronous requests - The web interface is now a semi-SPA Experience. This means that most operations are done through Asynchronous requests
In this initial release, this brings features such as a refresh button, a generally better User experience due to shorter loading times In this initial release, this brings features such as a refresh button, a generally better User experience due to shorter loading times
and fewer visual context changes. and fewer visual context changes.
- The web interface now has a darkmode, which is enabled automatically based on your Operating system darkmode. - The web interface now has a darkmode, which is enabled automatically based on your Operating system darkmode.
- Application Icons can now be uploaded directly to authentik, rather than just being loaded from a URL - Application Icons can now be uploaded directly to authentik, rather than just being loaded from a URL
## Smaller changes ## Smaller changes
- Add better support for Docker Service Connections with Certificates - Add better support for Docker Service Connections with Certificates
- Fix application API not returning the same format as other APIs - Fix application API not returning the same format as other APIs
## Upgrading ## Upgrading
@ -29,10 +29,11 @@ Docker-compose users should download the latest docker-compose file from [here](
:::caution :::caution
If you decided to rename the folder you're running the docker-compose file from, be aware that this will also change the name, that docker-compose will give the database volume. To mitigate this, either If you decided to rename the folder you're running the docker-compose file from, be aware that this will also change the name, that docker-compose will give the database volume. To mitigate this, either
- Keep the original directory name
- Move the directory and set `COMPOSE_PROJECT_NAME` to the name of the old directory (see [here](https://docs.docker.com/compose/reference/envvars/#compose_project_name)) - Keep the original directory name
- Create a backup, rename the directory and restore from backup. - Move the directory and set `COMPOSE_PROJECT_NAME` to the name of the old directory (see [here](https://docs.docker.com/compose/reference/envvars/#compose_project_name))
::: - Create a backup, rename the directory and restore from backup.
:::
The only manual change you have to do is replace the `PASSBOOK_` prefix in your `.env` file, so `PASSBOOK_SECRET_KEY` gets changed to `AUTHENTIK_SECRET_KEY`. The only manual change you have to do is replace the `PASSBOOK_` prefix in your `.env` file, so `PASSBOOK_SECRET_KEY` gets changed to `AUTHENTIK_SECRET_KEY`.
@ -73,10 +74,10 @@ helm upgrade authentik authentik/authentik --devel -f values.yaml
## Post-upgrade notes ## Post-upgrade notes
- Some default values change, for example the SAML Provider's default issuer. - Some default values change, for example the SAML Provider's default issuer.
This only makes a difference for newly created providers. This only makes a difference for newly created providers.
- Expression Policies variables change - Expression Policies variables change
Anything prefixed with `pb_` changes to `ak_`, this change is done **automatically** Anything prefixed with `pb_` changes to `ak_`, this change is done **automatically**

View file

@ -5,45 +5,45 @@ slug: "0.14"
## Headline features ## Headline features
- Flows are now graphically shown as diagrams, to visualise which stages and policies are bound. - Flows are now graphically shown as diagrams, to visualise which stages and policies are bound.
This diagram makes it significantly easier to understand how a flow works, as well as helping you design a flow that does exactly what you need. This diagram makes it significantly easier to understand how a flow works, as well as helping you design a flow that does exactly what you need.
- Events now have a more general purpose, rather than just logging audit actions. - Events now have a more general purpose, rather than just logging audit actions.
The following new events are now logged: The following new events are now logged:
- Policy Execution (Has to be enabled on a per-policy basis) - Policy Execution (Has to be enabled on a per-policy basis)
- Policy Exceptions - Policy Exceptions
- Property Mapping Exceptions - Property Mapping Exceptions
- Configuration Errors (currently these events are created by incorrectly configured providers, but will be used further in the future.) - Configuration Errors (currently these events are created by incorrectly configured providers, but will be used further in the future.)
- Update availability - Update availability
- The OAuth2 Provider has been updated to closer match the OpenID Connect Specifications - The OAuth2 Provider has been updated to closer match the OpenID Connect Specifications
Response type no longer has to be configured manually. The issuer field can be configured now (the default behaviour is the same as pre-0.14) Response type no longer has to be configured manually. The issuer field can be configured now (the default behaviour is the same as pre-0.14)
Authorization Codes are now generated as a JWT Token, which is not specified as spec, but seems to be a quasi-standard. Authorization Codes are now generated as a JWT Token, which is not specified as spec, but seems to be a quasi-standard.
- SAML Providers can now be created from SAML Metadata - SAML Providers can now be created from SAML Metadata
- The authentik proxy is now using the currently latest version of oauth2_proxy (6.1.1) - The authentik proxy is now using the currently latest version of oauth2_proxy (6.1.1)
- The license has been changed to GNU/GPL 3.0 - The license has been changed to GNU/GPL 3.0
## Fixes ## Fixes
- admin: fix policy test button in dark theme - admin: fix policy test button in dark theme
- core: fix anonymous user being included in User API - core: fix anonymous user being included in User API
- core: fix token update/delete not working - core: fix token update/delete not working
- core: fix User's token creation not working - core: fix User's token creation not working
- core: make application's provider not required - core: make application's provider not required
- core: show multi-select notice for SelectMultiple Widgets - core: show multi-select notice for SelectMultiple Widgets
- outposts: allow blank kubeconfig - outposts: allow blank kubeconfig
- outposts: validate kubeconfig before saving - outposts: validate kubeconfig before saving
- proxy: update to latest stable oauth2_proxy version - proxy: update to latest stable oauth2_proxy version
- root: update license - root: update license
- web: fix sidebar being overlaid over modal backdrop - web: fix sidebar being overlaid over modal backdrop
- web: fix table styling on mobile - web: fix table styling on mobile
- web: use displyname in sidebar for user - web: use displyname in sidebar for user
## Upgrading ## Upgrading

View file

@ -7,14 +7,14 @@ Due to some database changes that had to be rather sooner than later, there is n
To export data from your old instance, run this command: To export data from your old instance, run this command:
- docker-compose - docker-compose
``` ```
docker-compose exec server ./manage.py dumpdata -o /tmp/authentik_dump.json authentik_core.User authentik_core.Group authentik_crypto.CertificateKeyPair authentik_audit.Event otp_totp.totpdevice otp_static.staticdevice otp_static.statictoken docker-compose exec server ./manage.py dumpdata -o /tmp/authentik_dump.json authentik_core.User authentik_core.Group authentik_crypto.CertificateKeyPair authentik_audit.Event otp_totp.totpdevice otp_static.staticdevice otp_static.statictoken
docker cp authentik_server_1:/tmp/authentik_dump.json authentik_dump.json docker cp authentik_server_1:/tmp/authentik_dump.json authentik_dump.json
``` ```
- kubernetes - kubernetes
``` ```
kubectl exec -it authentik-web-... -- ./manage.py dumpdata -o /tmp/authentik_dump.json authentik_core.User authentik_core.Group authentik_crypto.CertificateKeyPair authentik_audit.Event otp_totp.totpdevice otp_static.staticdevice otp_static.statictoken kubectl exec -it authentik-web-... -- ./manage.py dumpdata -o /tmp/authentik_dump.json authentik_core.User authentik_core.Group authentik_crypto.CertificateKeyPair authentik_audit.Event otp_totp.totpdevice otp_static.staticdevice otp_static.statictoken
@ -23,14 +23,14 @@ kubectl cp authentik-web-...:/tmp/authentik_dump.json authentik_dump.json
After that, create a new authentik instance in a different namespace (kubernetes) or in a different folder (docker-compose). Once this instance is running, you can use the following commands to restore the data. On docker-compose, you still have to run the `migrate` command, to create all database structures. After that, create a new authentik instance in a different namespace (kubernetes) or in a different folder (docker-compose). Once this instance is running, you can use the following commands to restore the data. On docker-compose, you still have to run the `migrate` command, to create all database structures.
- docker-compose - docker-compose
``` ```
docker cp authentik_dump.json new_authentik_server_1:/tmp/authentik_dump.json docker cp authentik_dump.json new_authentik_server_1:/tmp/authentik_dump.json
docker-compose exec server ./manage.py loaddata /tmp/authentik_dump.json docker-compose exec server ./manage.py loaddata /tmp/authentik_dump.json
``` ```
- kubernetes - kubernetes
``` ```
kubectl cp authentik_dump.json authentik-web-...:/tmp/authentik_dump.json kubectl cp authentik_dump.json authentik-web-...:/tmp/authentik_dump.json

View file

@ -5,14 +5,14 @@ slug: "2021.1"
## Headline Changes ## Headline Changes
- New versioning schema (year.month.release) - New versioning schema (year.month.release)
- Add global email settings - Add global email settings
In previous versions, you had to configure email connection details per [Email Stage](../flow/stages/email/). Now, you can (and should) configure global settings. In previous versions, you had to configure email connection details per [Email Stage](../flow/stages/email/). Now, you can (and should) configure global settings.
This is documented under the [docker-compose](../installation/docker-compose.md) and [Kubernetes](../installation/kubernetes.md) sections. This is documented under the [docker-compose](../installation/docker-compose.md) and [Kubernetes](../installation/kubernetes.md) sections.
- New notification system - New notification system
More info can be found under [Notifications](../events/notifications.md) and [Transports](../events/transports.md). More info can be found under [Notifications](../events/notifications.md) and [Transports](../events/transports.md).
@ -22,37 +22,37 @@ slug: "2021.1"
## Fixes ## Fixes
- events: create event when system task fails - events: create event when system task fails
- helm: fix old reference to static secret_key - helm: fix old reference to static secret_key
- helm: fix s3 secret key and email password not being base64 encoded - helm: fix s3 secret key and email password not being base64 encoded
- policies: fix logic error for sync mode - policies: fix logic error for sync mode
- stages/email: fix email task not falling back to use_global_settings - stages/email: fix email task not falling back to use_global_settings
### Fixed in 2021.1.2 ### Fixed in 2021.1.2
- sources/*: Add source to flow context, so source is logged during login - sources/\*: Add source to flow context, so source is logged during login
- outposts: Fix outpost not correctly updating on outpost modification - outposts: Fix outpost not correctly updating on outpost modification
- outposts: Improve drift detection on kubernetes - outposts: Improve drift detection on kubernetes
- providers/saml: Fix metadata not being signed when signature is enabled - providers/saml: Fix metadata not being signed when signature is enabled
- policies: Improve error handling, ensure original stacktrace is preserved - policies: Improve error handling, ensure original stacktrace is preserved
### Fixed in 2021.1.3 ### Fixed in 2021.1.3
- admin: handle FlowNonApplicableException during flow plan - admin: handle FlowNonApplicableException during flow plan
- flows: fix FlowNonApplicableException not being Sentry Ignored - flows: fix FlowNonApplicableException not being Sentry Ignored
- lifecycle: fix typo causing single process in docker-compose - lifecycle: fix typo causing single process in docker-compose
### Fixed in 2021.1.4 ### Fixed in 2021.1.4
- admin: fix providers not showing SAML Import on empty state - admin: fix providers not showing SAML Import on empty state
- core: only cache Applications API when no filtering is done - core: only cache Applications API when no filtering is done
- events: fix email template for notifications - events: fix email template for notifications
- lib: fix ak_is_group_member checking wrong groups - lib: fix ak_is_group_member checking wrong groups
- providers/saml: add support for WindowsDomainQualifiedName, add docs for NameID - providers/saml: add support for WindowsDomainQualifiedName, add docs for NameID
- providers/saml: import SAML Provider with all autogenerated mappings - providers/saml: import SAML Provider with all autogenerated mappings
- providers/saml: make NameID configurable using a Property Mapping - providers/saml: make NameID configurable using a Property Mapping
- providers/saml: update default OIDs for default property mappings - providers/saml: update default OIDs for default property mappings
- web: fix site-shell being cut off when not full height - web: fix site-shell being cut off when not full height
## Upgrading ## Upgrading

View file

@ -5,219 +5,219 @@ slug: "2021.10"
## Headline Changes ## Headline Changes
- Flow Inspector - Flow Inspector
To better understand how a flow works, and why things might not be working as intended, you can now launch Flows with an inspector enabled. This is simply triggered by adding a `?inspector` to the URL. Currently, only superuser have the permission to access the Inspector. To better understand how a flow works, and why things might not be working as intended, you can now launch Flows with an inspector enabled. This is simply triggered by adding a `?inspector` to the URL. Currently, only superuser have the permission to access the Inspector.
The inspector shows the current stage, previous stages, next planned stages, and the current flow context. The inspector shows the current stage, previous stages, next planned stages, and the current flow context.
- SMS Authenticator - SMS Authenticator
You can now use SMS-based TOTP authenticators. This new Stage supports both Twilio, and a generic API endpoint, if using another provider. This stage does not have to be used for authentication, it can simply be used during enrollment to verify your users phone numbers. You can now use SMS-based TOTP authenticators. This new Stage supports both Twilio, and a generic API endpoint, if using another provider. This stage does not have to be used for authentication, it can simply be used during enrollment to verify your users phone numbers.
- Sign in with Apple - Sign in with Apple
It is now possible to add an Apple OAuth Source, to allow your users to authenticate with their Apple ID. It is now possible to add an Apple OAuth Source, to allow your users to authenticate with their Apple ID.
A huge shoutout to all the people that contributed, helped test and also translated authentik. This is the first release that has as full French translation! A huge shoutout to all the people that contributed, helped test and also translated authentik. This is the first release that has as full French translation!
## Minor changes ## Minor changes
- *: Squash Migrations (#1593) - \*: Squash Migrations (#1593)
- admin: clear update notification when notification's version matches current version - admin: clear update notification when notification's version matches current version
- cmd: prevent outposts from panicking when failing to get their config - cmd: prevent outposts from panicking when failing to get their config
- core: add default for user's settings attribute - core: add default for user's settings attribute
- core: add settings serializer to user/me and update_self endpoints, saved in a key in attributes - core: add settings serializer to user/me and update_self endpoints, saved in a key in attributes
- core: improve detection for s3 settings to trigger backup - core: improve detection for s3 settings to trigger backup
- core: include group uuids in self serializer - core: include group uuids in self serializer
- core: make user's name field fully optional - core: make user's name field fully optional
- flows: inspector (#1469) - flows: inspector (#1469)
- internal: add internal healthchecking to prevent websocket errors - internal: add internal healthchecking to prevent websocket errors
- internal/proxyv2: improve error handling when configuring app - internal/proxyv2: improve error handling when configuring app
- lifecycle: bump celery healthcheck to 5s timeout - lifecycle: bump celery healthcheck to 5s timeout
- lifecycle: only lock database when system migrations need to be applied, and during django migrations, and don't double unlock - lifecycle: only lock database when system migrations need to be applied, and during django migrations, and don't double unlock
- lifecycle: only set prometheus_multiproc_dir in ak wrapper to prevent full disk on worker - lifecycle: only set prometheus_multiproc_dir in ak wrapper to prevent full disk on worker
- managed: don't run managed reconciler in foreground on startup - managed: don't run managed reconciler in foreground on startup
- outpost/proxy: fix missing negation for internal host ssl verification - outpost/proxy: fix missing negation for internal host ssl verification
- outposts: add additional error checking for docker controller - outposts: add additional error checking for docker controller
- outposts: Adding more flexibility to outposts in Kubernetes. (#1617) - outposts: Adding more flexibility to outposts in Kubernetes. (#1617)
- outposts: allow disabling of docker controller port mapping - outposts: allow disabling of docker controller port mapping
- outposts: check ports of deployment in kubernetes outpost controller - outposts: check ports of deployment in kubernetes outpost controller
- outposts: don't always build permissions on outpost.user access, only in signals and tasks - outposts: don't always build permissions on outpost.user access, only in signals and tasks
- outposts: fallback to known-good outpost image if configured image cannot be pulled - outposts: fallback to known-good outpost image if configured image cannot be pulled
- outposts: fix error when comparing ports in docker controller when port mapping is disabled - outposts: fix error when comparing ports in docker controller when port mapping is disabled
- outposts: handle k8s 422 response code by recreating objects - outposts: handle k8s 422 response code by recreating objects
- outposts: rename docker_image_base to container_image_base, since its not docker specific - outposts: rename docker_image_base to container_image_base, since its not docker specific
- outposts/ldap: Support hard coded `uidNumber` and `gidNumber`. (#1582) - outposts/ldap: Support hard coded `uidNumber` and `gidNumber`. (#1582)
- outposts/proxy: add new headers with unified naming - outposts/proxy: add new headers with unified naming
- outposts/proxy: fix duplicate protocol in domain auth mode - outposts/proxy: fix duplicate protocol in domain auth mode
- outposts/proxy: show full error message when user is authenticated - outposts/proxy: show full error message when user is authenticated
- policies: add additional filters to create flow charts on frontend - policies: add additional filters to create flow charts on frontend
- policies/password: add extra sub_text field in tests - policies/password: add extra sub_text field in tests
- providers/ldap: use RDN when using posixGroup's memberUid attribute (#1514) - providers/ldap: use RDN when using posixGroup's memberUid attribute (#1514)
- providers/proxy: always check ingress secret in kubernetes controller - providers/proxy: always check ingress secret in kubernetes controller
- providers/proxy: update ingress controller to work with k8s 1.22 - providers/proxy: update ingress controller to work with k8s 1.22
- recovery: handle error when user doesn't exist - recovery: handle error when user doesn't exist
- root: add docker-native healthcheck for web and celery - root: add docker-native healthcheck for web and celery
- root: add translation for backend strings - root: add translation for backend strings
- root: coverage with toml support - root: coverage with toml support
- root: fix error with sentry proxy - root: fix error with sentry proxy
- root: migrate docker images to netlify proxy (#1603) - root: migrate docker images to netlify proxy (#1603)
- root: remove redundant internal network from compose - root: remove redundant internal network from compose
- root: remove structlog.processors.format_exc_info for new structlog version - root: remove structlog.processors.format_exc_info for new structlog version
- root: Use fully qualified names for docker bases base images. (#1490) - root: Use fully qualified names for docker bases base images. (#1490)
- sources/ldap: add support for Active Directory `userAccountControl` attribute - sources/ldap: add support for Active Directory `userAccountControl` attribute
- sources/ldap: don't sync ldap source when no property mappings are set - sources/ldap: don't sync ldap source when no property mappings are set
- sources/ldap: fix logic error in Active Directory account disabled status - sources/ldap: fix logic error in Active Directory account disabled status
- sources/oauth: add Sign in with Apple (#1635) - sources/oauth: add Sign in with Apple (#1635)
- stages/authenticator_sms: add generic provider (#1595) - stages/authenticator_sms: add generic provider (#1595)
- stages/authenticator_sms: Add SMS Authenticator Stage (#1577) - stages/authenticator_sms: Add SMS Authenticator Stage (#1577)
- stages/authenticator_validate: create a default authenticator validate stage with sensible defaults - stages/authenticator_validate: create a default authenticator validate stage with sensible defaults
- stages/email: add activate_user_on_success flag, add for all example flows - stages/email: add activate_user_on_success flag, add for all example flows
- stages/prompt: add sub_text field to add HTML below prompt fields - stages/prompt: add sub_text field to add HTML below prompt fields
- stages/prompt: fix sub_text not allowing blank - stages/prompt: fix sub_text not allowing blank
- stages/prompt: fix wrong field type of field_key - stages/prompt: fix wrong field type of field_key
- stages/user_login: add check for user.is_active and tests - stages/user_login: add check for user.is_active and tests
- stages/user_write: allow recursive writing to user.attributes - stages/user_write: allow recursive writing to user.attributes
- web: add locale detection - web: add locale detection
- web: ensure fallback locale is loaded - web: ensure fallback locale is loaded
- web: fix rendering of token copy button in dark mode - web: fix rendering of token copy button in dark mode
- web: fix strings not being translated at all when matching browser locale not found - web: fix strings not being translated at all when matching browser locale not found
- web: make table pagination size user-configurable - web: make table pagination size user-configurable
- web: new default flow background - web: new default flow background
- web: Translate /web/src/locales/en.po in fr_FR (#1506) - web: Translate /web/src/locales/en.po in fr_FR (#1506)
- web/admin: add fallback font for doughnut charts - web/admin: add fallback font for doughnut charts
- web/admin: default to warning state for backup task - web/admin: default to warning state for backup task
- web/admin: don't require username nor name for activate/deactivate toggles - web/admin: don't require username nor name for activate/deactivate toggles
- web/admin: fix description for flow import - web/admin: fix description for flow import
- web/admin: fix LDAP Source form not exposing syncParentGroup - web/admin: fix LDAP Source form not exposing syncParentGroup
- web/admin: fix search group label - web/admin: fix search group label
- web/admin: fix SMS Authenticator stage not loading state correctly - web/admin: fix SMS Authenticator stage not loading state correctly
- web/admin: improve visibility of oauth rsa key - web/admin: improve visibility of oauth rsa key
- web/admin: only show outpost deployment info when not embedded - web/admin: only show outpost deployment info when not embedded
- web/admin: truncate prompt label when too long - web/admin: truncate prompt label when too long
- web/elements: fix initialLoad not being done when viewportCheck was disabled - web/elements: fix initialLoad not being done when viewportCheck was disabled
- web/elements: fix model form always loading when viewport check is disabled - web/elements: fix model form always loading when viewport check is disabled
- web/elements: use dedicated button for search clear instead of webkit exclusive one - web/elements: use dedicated button for search clear instead of webkit exclusive one
- web/flows: adjust message for email stage - web/flows: adjust message for email stage
- web/user: don't show managed tokens in user interface - web/user: don't show managed tokens in user interface
- web/user: initial optimisation for smaller screens - web/user: initial optimisation for smaller screens
- web/user: load interface settings from user settings - web/user: load interface settings from user settings
## Fixed in 2021.10.1-rc2 ## Fixed in 2021.10.1-rc2
- core: add user flag to prevent users from changing their usernames - core: add user flag to prevent users from changing their usernames
- core: log user for http requests - core: log user for http requests
- flows: clear cache when deleting bindings - flows: clear cache when deleting bindings
- outpost/ldap: fix logging for mismatched provider - outpost/ldap: fix logging for mismatched provider
- root: add cookie domain setting - root: add cookie domain setting
- sources/oauth: add choices to oauth provider_type - sources/oauth: add choices to oauth provider_type
- web: disable Sentry.showReportDialog - web: disable Sentry.showReportDialog
- web/flows: showing of authentik logo in flow executor - web/flows: showing of authentik logo in flow executor
- web/flows: fix authenticator device selection not updating - web/flows: fix authenticator device selection not updating
- web/flows: show cancel link when choosing authenticator challenge - web/flows: show cancel link when choosing authenticator challenge
## Fixed in 2021.10.1-rc3 ## Fixed in 2021.10.1-rc3
- api: fix error when connection to websocket via secret_key - api: fix error when connection to websocket via secret_key
- core: add toggle to completely disable backup mechanism - core: add toggle to completely disable backup mechanism
- core: add USER_ATTRIBUTE_CHANGE_EMAIL - core: add USER_ATTRIBUTE_CHANGE_EMAIL
- events: fix error when notification transport doesn't exist anymore - events: fix error when notification transport doesn't exist anymore
- outposts: fix docker controller not using object_naming_template - outposts: fix docker controller not using object_naming_template
- providers/oauth2: fallback to uid if UPN was selected but isn't available - providers/oauth2: fallback to uid if UPN was selected but isn't available
- providers/oauth2: fix events being created from /application/o/authorize/ - providers/oauth2: fix events being created from /application/o/authorize/
- sources/ldap: prevent key `users` from being set as this is an M2M relation - sources/ldap: prevent key `users` from being set as this is an M2M relation
- sources/ldap: skip values which are of type bytes - sources/ldap: skip values which are of type bytes
## Fixed in 2021.10.1 ## Fixed in 2021.10.1
- core: add API for all user-source connections - core: add API for all user-source connections
- core: add API to list all authenticator devices - core: add API to list all authenticator devices
- core: add created field to source connection - core: add created field to source connection
- flows: optimise stage user_settings API - flows: optimise stage user_settings API
- outposts: separate websocket re-connection logic to decrease requests on reconnect - outposts: separate websocket re-connection logic to decrease requests on reconnect
- root: pin node images to v16 - root: pin node images to v16
- root: update golang ldap server package - root: update golang ldap server package
- web/user: fix wrong device being selected in user's mfa update form - web/user: fix wrong device being selected in user's mfa update form
- web/user: rework MFA Device UI to support multiple devices - web/user: rework MFA Device UI to support multiple devices
- web/user: update form to update mfa devices - web/user: update form to update mfa devices
## Fixed in 2021.10.2 ## Fixed in 2021.10.2
- api: replace django sentry proxy with go proxy to prevent login issues - api: replace django sentry proxy with go proxy to prevent login issues
- providers/proxy: allow configuring of additional scope mappings for proxy - providers/proxy: allow configuring of additional scope mappings for proxy
- providers/saml: fix error on missing AssertionConsumerServiceURL, fall back to default ACS - providers/saml: fix error on missing AssertionConsumerServiceURL, fall back to default ACS
- root: fix Detection of S3 settings for backups - root: fix Detection of S3 settings for backups
- root: fix postgres install on bullseye - root: fix postgres install on bullseye
- root: update base images for outposts - root: update base images for outposts
- root: update to buster - root: update to buster
- stages/identification: add show_source_labels option, to show labels for sources - stages/identification: add show_source_labels option, to show labels for sources
- stages/invitation: don't throw 404 error in stage - stages/invitation: don't throw 404 error in stage
- stages/invitation: remove invitation from plan context after deletion - stages/invitation: remove invitation from plan context after deletion
- stages/prompt: fix type in Prompt not having enum set - stages/prompt: fix type in Prompt not having enum set
- web/flows: fix invalid validation for static tokens - web/flows: fix invalid validation for static tokens
- web/flows: fix sub_text not rendering for static fields - web/flows: fix sub_text not rendering for static fields
- web/user: fix configureUrl not being passed to `<ak-user-settings-password>` - web/user: fix configureUrl not being passed to `<ak-user-settings-password>`
## Fixed in 2021.10.3 ## Fixed in 2021.10.3
- admin: improve check to remove version notifications - admin: improve check to remove version notifications
- cmd/server: improve cleanup on shutdown - cmd/server: improve cleanup on shutdown
- core: add command to output full config - core: add command to output full config
- core: fix auth_method for tokens - core: fix auth_method for tokens
- core: include parent group name - core: include parent group name
- core: make group membership lookup respect parent groups (upwards) - core: make group membership lookup respect parent groups (upwards)
- events: ignore creation/deletion of AuthenticatedSession objects - events: ignore creation/deletion of AuthenticatedSession objects
- internal: start embedded outpost directly after backend is healthy instead of waiting - internal: start embedded outpost directly after backend is healthy instead of waiting
- lifecycle: revert to non-h11 worker - lifecycle: revert to non-h11 worker
- outpost/ldap: don't cleanup user info as it is overwritten on bind - outpost/ldap: don't cleanup user info as it is overwritten on bind
- providers/*: include list of outposts - providers/\*: include list of outposts
- providers/ldap: add/squash migrations - providers/ldap: add/squash migrations
- providers/ldap: memory Query (#1681) - providers/ldap: memory Query (#1681)
- recovery: add create_admin_group management command - recovery: add create_admin_group management command
- root: fix defaults for EMAIL_USE_TLS - root: fix defaults for EMAIL_USE_TLS
- root: improve compose detection, add anonymous stats - root: improve compose detection, add anonymous stats
- root: keep last 30 backups - root: keep last 30 backups
- sources/ldap: remove deprecated default - sources/ldap: remove deprecated default
- sources/oauth: set prompt=none for Discord provider - sources/oauth: set prompt=none for Discord provider
- sources/plex: allow users to connect their plex account without login flow - sources/plex: allow users to connect their plex account without login flow
- sources/plex: use exception_to_string in tasks - sources/plex: use exception_to_string in tasks
- stages/authenticator_*: add default name for authenticators - stages/authenticator\_\*: add default name for authenticators
- stages/identification: only allow limited challenges for login sources - stages/identification: only allow limited challenges for login sources
- stages/identification: use random sleep - stages/identification: use random sleep
- stages/prompt: add text_read_only field - stages/prompt: add text_read_only field
- stages/prompt: default prompts to the current value of the context - stages/prompt: default prompts to the current value of the context
- stages/prompt: only set placeholder when in context - stages/prompt: only set placeholder when in context
- stages/prompt: set field placeholder based on plan context - stages/prompt: set field placeholder based on plan context
- stages/prompt: use initial instead of default - stages/prompt: use initial instead of default
- web: fix linting errors by adding a wrapper for next param - web: fix linting errors by adding a wrapper for next param
- web/admin: only show flows with an invitation stage configured instead of all enrollment flows - web/admin: only show flows with an invitation stage configured instead of all enrollment flows
- web/admin: show warning on invitation list when no stage exists or is bound - web/admin: show warning on invitation list when no stage exists or is bound
- web/admin: show warning on provider when not used with outpost - web/admin: show warning on provider when not used with outpost
- web/flows: fix authenticator_validate not allowing alphanumeric codes due to empty pattern - web/flows: fix authenticator_validate not allowing alphanumeric codes due to empty pattern
- web/flows: improve display of static tokens - web/flows: improve display of static tokens
- web/user: fix ak-user-settings-password getting wrong configureUrl - web/user: fix ak-user-settings-password getting wrong configureUrl
- web/user: fix device type for static tokens - web/user: fix device type for static tokens
- web/user: fix empty page when no sources to connect exist - web/user: fix empty page when no sources to connect exist
- web/user: fix redirect after starting configuration flow from user interface - web/user: fix redirect after starting configuration flow from user interface
## Fixed in 2021.10.4 ## Fixed in 2021.10.4
- core: force lowercase emails for gravatar usage - core: force lowercase emails for gravatar usage
- outposts: fix MFA Challenges not working with outpost - outposts: fix MFA Challenges not working with outpost
- outposts/ldap: fix logic error in cached ldap searcher - outposts/ldap: fix logic error in cached ldap searcher
- outposts/proxy: fix static files not being served in proxy mode - outposts/proxy: fix static files not being served in proxy mode
- providers/proxy: return list of configured scope names so outpost requests custom scopes - providers/proxy: return list of configured scope names so outpost requests custom scopes
- root: use python slim-bullseye as base - root: use python slim-bullseye as base
- sources/ldap: fix user/group sync overwriting attributes instead of merging them - sources/ldap: fix user/group sync overwriting attributes instead of merging them
- sources/ldap: set connect/receive timeout (default to 15s) - sources/ldap: set connect/receive timeout (default to 15s)
- stages/*: disable trim_whitespace on important fields - stages/\*: disable trim_whitespace on important fields
- stages/authenticator_duo: fix devices created with name - stages/authenticator_duo: fix devices created with name
- stages/authenticator_validate: enable all device classes by default - stages/authenticator_validate: enable all device classes by default
- web: write interfaces to different folders and remove custom chunk names - web: write interfaces to different folders and remove custom chunk names
- web/admin: fix display issues with flow execute buttons - web/admin: fix display issues with flow execute buttons
- web/admin: show warnings above tab bar - web/admin: show warnings above tab bar
- web/admin: use more natural default ordering for objects - web/admin: use more natural default ordering for objects
## Upgrading ## Upgrading
@ -233,6 +233,6 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: 2021.10.1 tag: 2021.10.1
``` ```

View file

@ -9,252 +9,252 @@ This release does not have any headline features, and mostly fixes bugs.
## Breaking changes ## Breaking changes
- stages/prompt: Before 2021.12, any policy was required to pass for the result to be considered valid. This has been changed, and now all policies are required to be valid. - stages/prompt: Before 2021.12, any policy was required to pass for the result to be considered valid. This has been changed, and now all policies are required to be valid.
## Minor changes ## Minor changes
- core: make defaults for _change_email and _change_username configurable - core: make defaults for \_change_email and \_change_username configurable
- core: remove dump_config, handle directly in config loader without booting django, don't check database - core: remove dump_config, handle directly in config loader without booting django, don't check database
- events: add gdpr_compliance option - events: add gdpr_compliance option
- internal: fix integrated docs not working - internal: fix integrated docs not working
- internal: use runserver when debug for code reload - internal: use runserver when debug for code reload
- lib: add cli option for lib.config - lib: add cli option for lib.config
- lib: add improved log to sentry events being sent - lib: add improved log to sentry events being sent
- lib: fix custom URL schemes being overwritten - lib: fix custom URL schemes being overwritten
- lib: load json strings in config env variables - lib: load json strings in config env variables
- lib: log error for file:// in config - lib: log error for file:// in config
- lifecycle: allow custom worker count in k8s - lifecycle: allow custom worker count in k8s
- lifecycle: improve backup restore by dropping database before - lifecycle: improve backup restore by dropping database before
- lifecycle: improve redis connection debug py printing full URL - lifecycle: improve redis connection debug py printing full URL
- outpost: configure error reporting based off of main instance config - outpost: configure error reporting based off of main instance config
- outposts: don't panic when listening for metrics fails - outposts: don't panic when listening for metrics fails
- outposts: reload on signal USR1, fix display of reload offset - outposts: reload on signal USR1, fix display of reload offset
- outposts/ldap: copy boundUsers map when running refresh instead of using blank map - outposts/ldap: copy boundUsers map when running refresh instead of using blank map
- outposts/ldap: fix panic when attempting to update without locked users mutex - outposts/ldap: fix panic when attempting to update without locked users mutex
- outposts/proxy: continue compiling additional regexes even when one fails - outposts/proxy: continue compiling additional regexes even when one fails
- outposts/proxy: show better error when hostname isn't configured - outposts/proxy: show better error when hostname isn't configured
- outposts/proxy: use disableIndex for static files - outposts/proxy: use disableIndex for static files
- policies/expression: fix ak_user_has_authenticator evaluation when not specifying optional device_type (#1849) - policies/expression: fix ak_user_has_authenticator evaluation when not specifying optional device_type (#1849)
- providers/saml: fix SessionNotOnOrAfter not being included - providers/saml: fix SessionNotOnOrAfter not being included
- root: add lifespan shim to prevent errors - root: add lifespan shim to prevent errors
- root: fix settings for managed not loaded - root: fix settings for managed not loaded
- root: make sentry sample rate configurable - root: make sentry sample rate configurable
- stages/authenticator_validate: catch error when attempting to configure user without flow - stages/authenticator_validate: catch error when attempting to configure user without flow
- stages/email: fix missing component in response when retrying email send - stages/email: fix missing component in response when retrying email send
- stages/email: minify email css template - stages/email: minify email css template
- stages/email: prevent error with duplicate token - stages/email: prevent error with duplicate token
- web: improve dark theme for vertical tabs - web: improve dark theme for vertical tabs
- web: only show applications with http link - web: only show applications with http link
- web/admin: allow flow edit on flow view page - web/admin: allow flow edit on flow view page
- web/admin: fix actions column on ip reputation page - web/admin: fix actions column on ip reputation page
- web/admin: fix Forms with file uploads not handling errors correctly - web/admin: fix Forms with file uploads not handling errors correctly
- web/admin: make object view pages more consistent - web/admin: make object view pages more consistent
- web/admin: make user clickable for bound policies list - web/admin: make user clickable for bound policies list
- web/admin: redesign provider pages to provide more info - web/admin: redesign provider pages to provide more info
- web/admin: show changelog on user info page - web/admin: show changelog on user info page
- web/admin: unify rendering and sorting of user lists - web/admin: unify rendering and sorting of user lists
- web/elements: add new API to store attributes in URL, use for table and tabs - web/elements: add new API to store attributes in URL, use for table and tabs
- web/elements: allow app.model names for ak-object-changelog - web/elements: allow app.model names for ak-object-changelog
- web/elements: allow multiple tabs with different state - web/elements: allow multiple tabs with different state
- web/flows: fix spinner during webauthn not centred - web/flows: fix spinner during webauthn not centred
- web/flows: update default background - web/flows: update default background
- web/user: fix filtering for applications based on launchURL - web/user: fix filtering for applications based on launchURL
- web/user: fix height issues on user interface - web/user: fix height issues on user interface
## Fixed in 2021.12.1-rc2 ## Fixed in 2021.12.1-rc2
- *: don't use go embed to make using custom files easier - \*: don't use go embed to make using custom files easier
- crypto: add certificate discovery to automatically import certificates from lets encrypt - crypto: add certificate discovery to automatically import certificates from lets encrypt
- crypto: fix default API not having an ordering - crypto: fix default API not having an ordering
- outposts: always trigger outpost reconcile on startup - outposts: always trigger outpost reconcile on startup
- outposts/ldap: Rework/improve LDAP search logic. (#1687) - outposts/ldap: Rework/improve LDAP search logic. (#1687)
- outposts/proxy: make logging fields more consistent - outposts/proxy: make logging fields more consistent
- outposts/proxy: re-add rs256 support - outposts/proxy: re-add rs256 support
- providers/proxy: fix defaults for traefik integration - providers/proxy: fix defaults for traefik integration
- providers/proxy: use wildcard for traefik headers copy - providers/proxy: use wildcard for traefik headers copy
- providers/saml: fix error when using post bindings and user freshly logged in - providers/saml: fix error when using post bindings and user freshly logged in
- providers/saml: fix IndexError in signature check - providers/saml: fix IndexError in signature check
- sources/ldap: add optional tls verification certificate - sources/ldap: add optional tls verification certificate
- sources/ldap: allow multiple server URIs for loadbalancing and failover - sources/ldap: allow multiple server URIs for loadbalancing and failover
- sources/ldap: don't cache LDAP Connection, use random server - sources/ldap: don't cache LDAP Connection, use random server
- sources/ldap: handle typeerror during creation of objects when using wrong keyword params - sources/ldap: handle typeerror during creation of objects when using wrong keyword params
- sources/plex: fix plex token being included in event log - sources/plex: fix plex token being included in event log
- stages/prompt: fix error when both default and required are set - stages/prompt: fix error when both default and required are set
- web/admin: add spinner to table refresh button to show progress - web/admin: add spinner to table refresh button to show progress
- web/admin: don't show disabled http basic as red - web/admin: don't show disabled http basic as red
- web/admin: fix wrong description for reputation policy - web/admin: fix wrong description for reputation policy
- web/flows: fix linting errors - web/flows: fix linting errors
- web/flows: Revise duo authenticator login prompt text (#1872) - web/flows: Revise duo authenticator login prompt text (#1872)
## Fixed in 2021.12.1-rc3 ## Fixed in 2021.12.1-rc3
- core: add FlowToken which saves the pickled flow plan, replace standard token in email stage to allow finishing flows in different sessions - core: add FlowToken which saves the pickled flow plan, replace standard token in email stage to allow finishing flows in different sessions
- core: fix missing permission check for group creating when creating service account - core: fix missing permission check for group creating when creating service account
- outposts/ldap: Fix search case sensitivity. (#1897) - outposts/ldap: Fix search case sensitivity. (#1897)
- policies/expression: add ak_call_policy - policies/expression: add ak_call_policy
- providers/saml: add ?force_binding to limit bindings for metadata endpoint - providers/saml: add ?force_binding to limit bindings for metadata endpoint
- root: add request_id to celery tasks, prefixed with "task-" - root: add request_id to celery tasks, prefixed with "task-"
- sources/*: Allow creation of source connections via API - sources/\*: Allow creation of source connections via API
- stages/prompt: use policyenginemode all - stages/prompt: use policyenginemode all
- tests/e2e: add post binding test - tests/e2e: add post binding test
- web: fix duplicate classes, make generic icon clickable - web: fix duplicate classes, make generic icon clickable
- web: fix text colour for bad request on light mode - web: fix text colour for bad request on light mode
- web/admin: show outpost warning on application page too - web/admin: show outpost warning on application page too
- web/elements: close dropdown when refresh event is dispatched - web/elements: close dropdown when refresh event is dispatched
- web/user: allow custom font-awesome icons for applications - web/user: allow custom font-awesome icons for applications
## Fixed in 2021.12.1-rc4 ## Fixed in 2021.12.1-rc4
- core: fix error when using invalid key-values in attributes query - core: fix error when using invalid key-values in attributes query
- flows: fix error in inspector view - flows: fix error in inspector view
- flows: fix error when trying to print FlowToken objects - flows: fix error when trying to print FlowToken objects
- lib: correctly report "faked" IPs to sentry - lib: correctly report "faked" IPs to sentry
- outposts: add additional checks for websocket connection - outposts: add additional checks for websocket connection
- outposts: cleanup logs for failed binds - outposts: cleanup logs for failed binds
- outposts: don't try to create docker client for embedded outpost - outposts: don't try to create docker client for embedded outpost
- outposts: fix docker controller not stopping containers - outposts: fix docker controller not stopping containers
- outposts: fix unlabeled transaction - outposts: fix unlabeled transaction
- outposts: handle RuntimeError during websocket connect - outposts: handle RuntimeError during websocket connect
- outposts: rewrite re-connect logic without recws - outposts: rewrite re-connect logic without recws
- outposts: set display name for outpost service account - outposts: set display name for outpost service account
- outposts/ldap: fix searches with mixed casing - outposts/ldap: fix searches with mixed casing
- outposts/proxy: use filesystem storage for non-embedded outposts - outposts/proxy: use filesystem storage for non-embedded outposts
- policies: don't always clear application cache on post_save - policies: don't always clear application cache on post_save
- stagse/authenticator_webauthn: remove pydantic import - stagse/authenticator_webauthn: remove pydantic import
- web: fix borders of sidebars in dark mode - web: fix borders of sidebars in dark mode
## Fixed in 2021.12.1-rc5 ## Fixed in 2021.12.1-rc5
- crypto: add additional validation before importing a certificate - crypto: add additional validation before importing a certificate
- events: add flow_execution event type - events: add flow_execution event type
- events: fix schema for top_per_user - events: fix schema for top_per_user
- flows: fix wrong exception being caught in flow inspector - flows: fix wrong exception being caught in flow inspector
- outposts: reset backoff after successful connect - outposts: reset backoff after successful connect
- outposts/proxy: fix securecookie: the value is too long again, since it can happen even with filesystem storage - outposts/proxy: fix securecookie: the value is too long again, since it can happen even with filesystem storage
- providers/oauth2: add additional logging to show with token path is taken - providers/oauth2: add additional logging to show with token path is taken
- providers/oauth2: use generate_key instead of uuid4 - providers/oauth2: use generate_key instead of uuid4
- sources/ldap: fix incorrect task names being referenced, use source native slug - sources/ldap: fix incorrect task names being referenced, use source native slug
- sources/oauth: add initial okta type - sources/oauth: add initial okta type
- sources/oauth: allow oauth types to override their login button challenge - sources/oauth: allow oauth types to override their login button challenge
- sources/oauth: implement apple native sign-in using the apple JS SDK - sources/oauth: implement apple native sign-in using the apple JS SDK
- sources/oauth: strip parts of custom apple client_id - sources/oauth: strip parts of custom apple client_id
- stages/authenticator_webauthn: make user_verification configurable - stages/authenticator_webauthn: make user_verification configurable
- stages/identification: fix miscalculated sleep - stages/identification: fix miscalculated sleep
- stages/invitation: use GroupMemberSerializer serializer to prevent all of the user's groups and their users from being returned - stages/invitation: use GroupMemberSerializer serializer to prevent all of the user's groups and their users from being returned
- web: add link to open API Browser for API Drawer - web: add link to open API Browser for API Drawer
- web/admin: add dashboard with user creation/login statistics - web/admin: add dashboard with user creation/login statistics
- web/admin: fix invalid display for LDAP Source sync status - web/admin: fix invalid display for LDAP Source sync status
- web/admin: fix rendering for applications on view page - web/admin: fix rendering for applications on view page
- web/admin: fix rendering of applications with custom icon - web/admin: fix rendering of applications with custom icon
- web/admin: improve wording for froward_auth, don't show setup when using proxy mode - web/admin: improve wording for froward_auth, don't show setup when using proxy mode
- web/admin: show warning when deleting currently logged in user - web/admin: show warning when deleting currently logged in user
- web/admin: update overview page - web/admin: update overview page
- web/flows: fix error when attempting to enroll new webauthn device - web/flows: fix error when attempting to enroll new webauthn device
## Fixed in 2021.12.1 ## Fixed in 2021.12.1
- core: fix error when attempting to provider from cached application - core: fix error when attempting to provider from cached application
- events: improve app lookup for event creation - events: improve app lookup for event creation
- internal: cleanup duplicate and redundant code, properly set sentry SDK scope settings - internal: cleanup duplicate and redundant code, properly set sentry SDK scope settings
- lifecycle: add -Ofair to celery - lifecycle: add -Ofair to celery
- web/admin: add sidebar to applications - web/admin: add sidebar to applications
- web/admin: fix notification unread colours not matching on user and admin interface - web/admin: fix notification unread colours not matching on user and admin interface
- web/admin: fix stage related flows not being shown in a list - web/admin: fix stage related flows not being shown in a list
- web/elements: add Markdown component to improve rendering - web/elements: add Markdown component to improve rendering
- web/elements: add support for sidebar on table page - web/elements: add support for sidebar on table page
- web/elements: close notification drawer when clearing all notifications - web/elements: close notification drawer when clearing all notifications
## Fixed in 2021.12.2 ## Fixed in 2021.12.2
- core: don't rotate non-api tokens - core: don't rotate non-api tokens
- crypto: fix private keys not being imported correctly - crypto: fix private keys not being imported correctly
- outposts: release binary outposts (#1954) - outposts: release binary outposts (#1954)
- outposts/proxy: match skipPathRegex against full URL on domain auth - outposts/proxy: match skipPathRegex against full URL on domain auth
- policies/password: add minimum digits - policies/password: add minimum digits
- providers/oauth2: don't rely on expiry task for access codes and refresh tokens - providers/oauth2: don't rely on expiry task for access codes and refresh tokens
- sources/oauth: allow writing to user in SourceConnection - sources/oauth: allow writing to user in SourceConnection
- web: ignore instantSearchSDKJSBridgeClearHighlight error on edge on iOS - web: ignore instantSearchSDKJSBridgeClearHighlight error on edge on iOS
- web/admin: fix background colour for application sidebar - web/admin: fix background colour for application sidebar
- web/elements: fix border between search buttons - web/elements: fix border between search buttons
## Fixed in 2021.12.3 ## Fixed in 2021.12.3
- *: revert to using GHCR directly - \*: revert to using GHCR directly
- core: fix error when getting launch URL for application with non-existent Provider - core: fix error when getting launch URL for application with non-existent Provider
- internal: fix sentry sample rate not applying to proxy - internal: fix sentry sample rate not applying to proxy
- internal: rework global logging settings, embedded outpost no longer overwrites core - internal: rework global logging settings, embedded outpost no longer overwrites core
- outpost: re-run globalSetup when updating config, allowing for live log level changes - outpost: re-run globalSetup when updating config, allowing for live log level changes
- outposts: handle/ignore http Abort handler - outposts: handle/ignore http Abort handler
- outposts/ldap: fix log formatter and level not being set correctly - outposts/ldap: fix log formatter and level not being set correctly
- outposts/proxy: add initial redirect-loop prevention - outposts/proxy: add initial redirect-loop prevention
- outposts/proxy: fix allowlist for forward_auth and traefik - outposts/proxy: fix allowlist for forward_auth and traefik
- outposts/proxy: fix ping URI not being routed - outposts/proxy: fix ping URI not being routed
- outposts/proxy: fix session not expiring correctly due to miscalculation - outposts/proxy: fix session not expiring correctly due to miscalculation
- root: allow trace log level to work for core/embedded - root: allow trace log level to work for core/embedded
- root: don't set secure cross opener policy - root: don't set secure cross opener policy
- root: drop redis cache sentry errors - root: drop redis cache sentry errors
- root: fix inconsistent URL quoting of redis URLs - root: fix inconsistent URL quoting of redis URLs
- web/admin: add outpost type to list - web/admin: add outpost type to list
- web/admin: auto set the embedded outpost's authentik_host on first view - web/admin: auto set the embedded outpost's authentik_host on first view
- web/admin: don't auto-select certificate for LDAP source verification - web/admin: don't auto-select certificate for LDAP source verification
- web/admin: fix border for outpost health status - web/admin: fix border for outpost health status
## Fixed in 2021.12.4 ## Fixed in 2021.12.4
- crypto: improve handling for non-rsa private keys - crypto: improve handling for non-rsa private keys
- events: create test notification with event with data - events: create test notification with event with data
- internal: add custom proxy certificates support to embedded outpost - internal: add custom proxy certificates support to embedded outpost
- policies: fix application cache not being cleared correctly - policies: fix application cache not being cleared correctly
- providers/oauth2: remove jwt_alg field and set algorithm based on selected keypair, select HS256 when no keypair is selected - providers/oauth2: remove jwt_alg field and set algorithm based on selected keypair, select HS256 when no keypair is selected
- stages/authenticator_validate: add passwordless login - stages/authenticator_validate: add passwordless login
- stages/authenticator_validate: fix prompt not triggering when using in non-authentication context - stages/authenticator_validate: fix prompt not triggering when using in non-authentication context
- stages/authenticator_validate: refuse passwordless flow if flow is not for authentication - stages/authenticator_validate: refuse passwordless flow if flow is not for authentication
- tenants: add web certificate field, make authentik's core certificate configurable based on keypair - tenants: add web certificate field, make authentik's core certificate configurable based on keypair
- web/admin: fix explore integration not opening in new tab - web/admin: fix explore integration not opening in new tab
- web/elements: fix link from notification drawer not working in user interface - web/elements: fix link from notification drawer not working in user interface
- web/user: fix user details not rendering when loading to a different user settings tab and then switching - web/user: fix user details not rendering when loading to a different user settings tab and then switching
## Fixed in 2021.12.5 ## Fixed in 2021.12.5
- *: use py3.10 syntax for unions, remove old Type[] import when possible - \*: use py3.10 syntax for unions, remove old Type[] import when possible
- core: add API endpoint to directly set user's password - core: add API endpoint to directly set user's password
- core: add error handling in source flow manager when flow isn't applicable - core: add error handling in source flow manager when flow isn't applicable
- core: fix UserSelfSerializer's save() overwriting other user attributes - core: fix UserSelfSerializer's save() overwriting other user attributes
- core: prevent LDAP password being set for internal hash upgrades - core: prevent LDAP password being set for internal hash upgrades
- crypto: return private key's type (required for some oauth2 providers) - crypto: return private key's type (required for some oauth2 providers)
- flows: add test helpers to simplify and improve checking of stages, remove force_str - flows: add test helpers to simplify and improve checking of stages, remove force_str
- flows: don't create EventAction.FLOW_EXECUTION - flows: don't create EventAction.FLOW_EXECUTION
- flows: update default flow titles - flows: update default flow titles
- flows: use WithUserInfoChallenge for AccessDeniedChallenge - flows: use WithUserInfoChallenge for AccessDeniedChallenge
- lib: strip values for timedelta from string - lib: strip values for timedelta from string
- outposts: add remote docker integration via SSH - outposts: add remote docker integration via SSH
- outposts: fix outpost's sentry not sending release - outposts: fix outpost's sentry not sending release
- outposts: include outposts build hash in state - outposts: include outposts build hash in state
- outposts/proxy: add support for multiple states, when multiple requests are redirect at once - outposts/proxy: add support for multiple states, when multiple requests are redirect at once
- outposts/proxy: fix error checking for type assertion - outposts/proxy: fix error checking for type assertion
- policies/reputation: rework reputation to use a single entry, include geo_ip data - policies/reputation: rework reputation to use a single entry, include geo_ip data
- sources/oauth: add additional scopes field to get additional data from provider - sources/oauth: add additional scopes field to get additional data from provider
- sources/oauth: fix github provider not including correct base scopes - sources/oauth: fix github provider not including correct base scopes
- stages/identification: add field for passwordless flow - stages/identification: add field for passwordless flow
- tenants: forbid creation of multiple default tenants - tenants: forbid creation of multiple default tenants
- web: add tr to locale - web: add tr to locale
- web: remove page header colour, match user navbar to admin sidebar - web: remove page header colour, match user navbar to admin sidebar
- web/admin: add Admin in titlebar for admin interface - web/admin: add Admin in titlebar for admin interface
- web/admin: fix alignment in outpost list when expanding rows - web/admin: fix alignment in outpost list when expanding rows
- web/admin: fix display when groups/users don't fit on a single row - web/admin: fix display when groups/users don't fit on a single row
- web/admin: include key type in list - web/admin: include key type in list
- web/admin: mark additional scopes as non-required - web/admin: mark additional scopes as non-required
- web/admin: show flow title in list - web/admin: show flow title in list
- web/elements: fix alignment of chipgroup on modal add - web/elements: fix alignment of chipgroup on modal add
- web/elements: fix spacing between chips in chip-group - web/elements: fix spacing between chips in chip-group
- web/elements: re-enable codemirror line numbers (fixed on firefox) - web/elements: re-enable codemirror line numbers (fixed on firefox)
- web/flows: add workaround for autofocus not working in password stage - web/flows: add workaround for autofocus not working in password stage
- web/flows: fix duplicate loading spinners when using webauthn - web/flows: fix duplicate loading spinners when using webauthn
- web/flows: fix helper form not being removed from identification stage (improve password manager compatibility) - web/flows: fix helper form not being removed from identification stage (improve password manager compatibility)
- web/flows: include user in access denied stage - web/flows: include user in access denied stage
- web/flows: only add helper username input if using native shadow dom to prevent browser confusion - web/flows: only add helper username input if using native shadow dom to prevent browser confusion
- web/user: add language selection - web/user: add language selection
- web/user: rework user source connection UI - web/user: rework user source connection UI
## Upgrading ## Upgrading
@ -270,6 +270,6 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: 2021.12.1 tag: 2021.12.1
``` ```

View file

@ -5,107 +5,107 @@ slug: "2021.2"
## Headline Changes ## Headline Changes
- Managed objects - Managed objects
Objects like property mappings can now be marked as managed, which means that they will be created, updated and deleted by authentik. Objects like property mappings can now be marked as managed, which means that they will be created, updated and deleted by authentik.
Currently, this is used to update default property mappings, and mark tokens and users generated by outposts. Currently, this is used to update default property mappings, and mark tokens and users generated by outposts.
- Improved support for different LDAP Servers - Improved support for different LDAP Servers
The LDAP source has improved support for non-Active Directory LDAP setups. This includes the following changes: The LDAP source has improved support for non-Active Directory LDAP setups. This includes the following changes:
- Switch to sync membership from groups to users rather than user to group - Switch to sync membership from groups to users rather than user to group
- Fix users, which were removed from a group in LDAP not being removed from said group - Fix users, which were removed from a group in LDAP not being removed from said group
- Add support for LDAP servers which have core fields declared as lists - Add support for LDAP servers which have core fields declared as lists
- Add property-mappings for groups, to map attributes like `name` or `is_superuser` - Add property-mappings for groups, to map attributes like `name` or `is_superuser`
- Add test view to debug property-mappings. - Add test view to debug property-mappings.
## Fixes ## Fixes
- admin: add test view for property mappings - admin: add test view for property mappings
- core: Fix application cache not being cleared correctly (and not being ignored for searches) - core: Fix application cache not being cleared correctly (and not being ignored for searches)
- events: add send_once flag to send webhooks only once - events: add send_once flag to send webhooks only once
- events: allow searching by event id - events: allow searching by event id
- events: don't log successful system tasks - events: don't log successful system tasks
- events: improve information sent in notification emails - events: improve information sent in notification emails
- providers/oauth2: pass application to configuration error event - providers/oauth2: pass application to configuration error event
- providers/saml: fix imported provider not saving properties correctly - providers/saml: fix imported provider not saving properties correctly
- root: use filtering_bound_logger for speed improvements - root: use filtering_bound_logger for speed improvements
- stages/consent: fix wrong widget for expire - stages/consent: fix wrong widget for expire
- web: migrate Provider List to SPA - web: migrate Provider List to SPA
## Fixed in 2021.2.1-rc2 ## Fixed in 2021.2.1-rc2
- admin: add Certificate-Keypair generation - admin: add Certificate-Keypair generation
- admin: fix property-mapping views redirecting to invalid URL - admin: fix property-mapping views redirecting to invalid URL
- admin: improve layout for policy testing - admin: improve layout for policy testing
- admin: remove old provider list view - admin: remove old provider list view
- outpost: cap reconnect backoff at 60 seconds, reset backoff on successful connection - outpost: cap reconnect backoff at 60 seconds, reset backoff on successful connection
- policies: add debug flag to PolicyRequest to prevent alerts from testing policies - policies: add debug flag to PolicyRequest to prevent alerts from testing policies
- providers/saml: force-set friendly_name to empty string for managed mappings - providers/saml: force-set friendly_name to empty string for managed mappings
- root: add dedicated live and readiness healthcheck views - root: add dedicated live and readiness healthcheck views
- web: fix link to provider list on overview page - web: fix link to provider list on overview page
- web: fix outpost item in sidebar being active on service connection views - web: fix outpost item in sidebar being active on service connection views
## Fixed in 2021.2.1-stable ## Fixed in 2021.2.1-stable
- admin: fix link in source list - admin: fix link in source list
- web: rebuild Outposts list in SPA - web: rebuild Outposts list in SPA
- outposts: Fix reconnect not working reliably - outposts: Fix reconnect not working reliably
- providers/oauth2: add authorized scopes to AUTHORIZE_APPLICATION event - providers/oauth2: add authorized scopes to AUTHORIZE_APPLICATION event
- providers/oauth2: add unofficial groups attribute to default profile claim - providers/oauth2: add unofficial groups attribute to default profile claim
- web: fix sidebar being active when stage prompts is selected - web: fix sidebar being active when stage prompts is selected
## Fixed in 2021.2.2-stable ## Fixed in 2021.2.2-stable
- crypto: move certificate and key data to separate api calls to create events - crypto: move certificate and key data to separate api calls to create events
- events: rename context.token to context.secret - events: rename context.token to context.secret
- events: rename token_view to secret_view - events: rename token_view to secret_view
- lib: fix stacktrace for general expressions - lib: fix stacktrace for general expressions
- outposts: fix ProxyProvider update not triggering outpost update - outposts: fix ProxyProvider update not triggering outpost update
- policies: skip cache on debug request - policies: skip cache on debug request
- providers/proxy: fix certificates without key being selectable - providers/proxy: fix certificates without key being selectable
- root: log runtime in milliseconds - root: log runtime in milliseconds
- sources/*: switch API to use slug in URL - sources/\*: switch API to use slug in URL
- sources/ldap: add API for sync status - sources/ldap: add API for sync status
- sources/oauth: add callback URL to api - sources/oauth: add callback URL to api
- web: fix ModalButton working in global scope, causing issues on 2nd use - web: fix ModalButton working in global scope, causing issues on 2nd use
## Fixed in 2021.2.3-stable ## Fixed in 2021.2.3-stable
- core: fix tokens using wrong lookup - core: fix tokens using wrong lookup
- web: fix missing source create button - web: fix missing source create button
## Fixed in 2021.2.4-stable ## Fixed in 2021.2.4-stable
- admin: fix missing success_urls causing errors on create/update forms - admin: fix missing success_urls causing errors on create/update forms
- core: fix typo in user settings causing sources to not show - core: fix typo in user settings causing sources to not show
## Fixed in 2021.2.5-stable ## Fixed in 2021.2.5-stable
- admin: fix policy list not having a refresh button - admin: fix policy list not having a refresh button
- events: pass Event's user to Notification policy engine when present - events: pass Event's user to Notification policy engine when present
- helm: add initial wait for healthcheck - helm: add initial wait for healthcheck
- outpost: improve logging output, ensure fields match api server - outpost: improve logging output, ensure fields match api server
- root: fix request_id not being logged for actual asgi requests - root: fix request_id not being logged for actual asgi requests
- sources/oauth: fix buttons not being ak-root-link - sources/oauth: fix buttons not being ak-root-link
- web: fix library not being full height, again - web: fix library not being full height, again
- web: fix outpost edit/delete buttons - web: fix outpost edit/delete buttons
- web: fix SiteShell breaking links when handlers are updated twice - web: fix SiteShell breaking links when handlers are updated twice
## Fixed in 2021.2.6-stable ## Fixed in 2021.2.6-stable
- admin: fix missing success_url for Cache clean views - admin: fix missing success_url for Cache clean views
- events: fix error when event can't be loaded in rule task - events: fix error when event can't be loaded in rule task
- flows: handle error when app cannot be found during flow import - flows: handle error when app cannot be found during flow import
- policies: sort groups in GroupMembershipPolicy policy and binding - policies: sort groups in GroupMembershipPolicy policy and binding
- providers/oauth2: fix error when no login event could be found - providers/oauth2: fix error when no login event could be found
- sources/ldap: fix API error when source has not synced yet - sources/ldap: fix API error when source has not synced yet
- sources/ldap: fix password setter on users which are not LDAP - sources/ldap: fix password setter on users which are not LDAP
- web: add sentry CaptureConsole - web: add sentry CaptureConsole
- web: fix colourstyles not being included in common_styles - web: fix colourstyles not being included in common_styles
## Upgrading ## Upgrading
@ -116,11 +116,12 @@ Due to the switch to managed objects, some default property mappings are changin
The change affects the "SAML Name" property, which has been changed from an oid to a Schema URI to aid readability. The change affects the "SAML Name" property, which has been changed from an oid to a Schema URI to aid readability.
The integrations affected are: The integrations affected are:
- [Ansible Tower/AWX](/integrations/services/awx-tower/)
- [GitLab](/integrations/services/gitlab/) - [Ansible Tower/AWX](/integrations/services/awx-tower/)
- [NextCloud](/integrations/services/nextcloud/) - [GitLab](/integrations/services/gitlab/)
- [Rancher](/integrations/services/rancher/) - [NextCloud](/integrations/services/nextcloud/)
- [Sentry](/integrations/services/sentry/) - [Rancher](/integrations/services/rancher/)
- [Sentry](/integrations/services/sentry/)
### docker-compose ### docker-compose

View file

@ -5,13 +5,13 @@ slug: "2021.3"
## Headline Changes ## Headline Changes
- WebAuthn support - WebAuthn support
This release introduces support for [WebAuthn](https://webauthn.io/), an open standard for the use of hardware authentication keys like YubiKeys on the web. This release introduces support for [WebAuthn](https://webauthn.io/), an open standard for the use of hardware authentication keys like YubiKeys on the web.
You can configure a WebAuthn device using the "WebAuthn Authenticator Setup Stage" stage. Afterwards, it can be used as an n-th factor, just like TOTP authenticators. You can configure a WebAuthn device using the "WebAuthn Authenticator Setup Stage" stage. Afterwards, it can be used as an n-th factor, just like TOTP authenticators.
- Simplify role-based access - Simplify role-based access
Instead of having to create a Group Membership policy for every group you want to use, you can now select a Group and even a User directly in a binding. Instead of having to create a Group Membership policy for every group you want to use, you can now select a Group and even a User directly in a binding.
@ -21,65 +21,63 @@ slug: "2021.3"
Group Membership policies are automatically migrated to use this simplified access. Group Membership policies are automatically migrated to use this simplified access.
- Invisible reCAPTCHA - Invisible reCAPTCHA
The checkbox-based reCAPTCHA has been replaced with [reCAPTCHA v2 Invisible](https://developers.google.com/recaptcha/docs/invisible). The checkbox-based reCAPTCHA has been replaced with [reCAPTCHA v2 Invisible](https://developers.google.com/recaptcha/docs/invisible).
This is a breaking change, as a set of reCAPTCHA keys are only valid for a single type. For this, go to https://www.google.com/recaptcha/admin and create a new set of keys with the "reCAPTCHA v2" type and "Invisible reCAPTCHA badge" mode. This is a breaking change, as a set of reCAPTCHA keys are only valid for a single type. For this, go to https://www.google.com/recaptcha/admin and create a new set of keys with the "reCAPTCHA v2" type and "Invisible reCAPTCHA badge" mode.
- Migration of Flow Executor to SPA/API - Migration of Flow Executor to SPA/API
The flow executor has been migrated to a full SPA/API architecture. This was required for WebAuthn, but also allows for greater customizability. The flow executor has been migrated to a full SPA/API architecture. This was required for WebAuthn, but also allows for greater customizability.
It also allows other services to use the flow executor via an API, which will be used by the outpost further down the road. It also allows other services to use the flow executor via an API, which will be used by the outpost further down the road.
- Deny stage - Deny stage
A new stage which simply denies access. This can be used to conditionally deny access to users during a flow. Authorization flows for example required an authenticated user, but there was no previous way to block access for un-authenticated users. A new stage which simply denies access. This can be used to conditionally deny access to users during a flow. Authorization flows for example required an authenticated user, but there was no previous way to block access for un-authenticated users.
If you conditionally include this stage in a flow, make sure to disable "Evaluate on plan", as that will always include the stage in the flow, regardless of the inputs. If you conditionally include this stage in a flow, make sure to disable "Evaluate on plan", as that will always include the stage in the flow, regardless of the inputs.
## Fixed in 2021.3.2 ## Fixed in 2021.3.2
- sources/ldap: fix sync for Users without pwdLastSet - sources/ldap: fix sync for Users without pwdLastSet
- web: fix date display issue - web: fix date display issue
- web: fix submit in Modal reloading page in firefox - web: fix submit in Modal reloading page in firefox
## Fixed in 2021.3.3 ## Fixed in 2021.3.3
- providers/oauth2: allow protected_resource_view when method is OPTIONS - providers/oauth2: allow protected_resource_view when method is OPTIONS
- stages/authenticator_static: fix error when disable static tokens - stages/authenticator_static: fix error when disable static tokens
- stages/authenticator_webauthn: add missing migration - stages/authenticator_webauthn: add missing migration
- web: fix Colours for user settings in dark mode - web: fix Colours for user settings in dark mode
- web: fix Flow executor not showing spinner when redirecting - web: fix Flow executor not showing spinner when redirecting
- web: fix Source icons not being displayed on firefox - web: fix Source icons not being displayed on firefox
- web: fix styling for static token list - web: fix styling for static token list
## Fixed in 2021.3.4 ## Fixed in 2021.3.4
- admin: include git build hash in gh-* tags and show build hash in admin overview - admin: include git build hash in gh-\* tags and show build hash in admin overview
- events: don't fail on boot when geoip can't be opened - events: don't fail on boot when geoip can't be opened
- helm: add initial geoip - helm: add initial geoip
- outposts: improve logs for outpost connection - outposts: improve logs for outpost connection
- policies: fix error when clearing policy cache when no policies are cached - policies: fix error when clearing policy cache when no policies are cached
- root: add comment for error reporting to compose - root: add comment for error reporting to compose
- root: add geoip config to docker-compose - root: add geoip config to docker-compose
- sources/oauth: fix error on user enrollment when no enrollment flow is defined - sources/oauth: fix error on user enrollment when no enrollment flow is defined
- web: add close button to messages - web: add close button to messages
- web: backport fix: add missing background filter - web: backport fix: add missing background filter
- web: fix outpost health display - web: fix outpost health display
- web: fix path for fallback flow view - web: fix path for fallback flow view
- web: fix system task index - web: fix system task index
- web: improve compatibility with password managers - web: improve compatibility with password managers
- web: improve layout of expanded event info - web: improve layout of expanded event info
- web: improve styling for application list - web: improve styling for application list
- web: prevent duplicate messages - web: prevent duplicate messages
- web: show related edit button for bound stages and policies - web: show related edit button for bound stages and policies
- web: use chunking for vendor and api - web: use chunking for vendor and api
- web: use loadingState for autosubmitStage - web: use loadingState for autosubmitStage
- web: use sections in sidebar, adjust colouring - web: use sections in sidebar, adjust colouring
## Upgrading ## Upgrading

View file

@ -5,127 +5,126 @@ slug: "2021.4"
## Headline Changes ## Headline Changes
- Configurable Policy engine mode - Configurable Policy engine mode
In the past, all objects, which could have policies attached to them, required *all* policies to pass to consider an action successful. In the past, all objects, which could have policies attached to them, required _all_ policies to pass to consider an action successful.
You can now configure if *all* policies need to pass, or if *any* policy needs to pass. You can now configure if _all_ policies need to pass, or if _any_ policy needs to pass.
This can now be configured for the following objects: This can now be configured for the following objects:
- Applications (access restrictions) - Applications (access restrictions)
- Sources - Sources
- Flows - Flows
- Flow-stage bindings - Flow-stage bindings
For backwards compatibility, this is set to *all*, but new objects will default to *any*. For backwards compatibility, this is set to _all_, but new objects will default to _any_.
- Expiring Events - Expiring Events
Previously, events would stay in the database forever, and had to eventually be cleaned up manually. This version add expiry to events with a default Previously, events would stay in the database forever, and had to eventually be cleaned up manually. This version add expiry to events with a default
timeout of 1 Year. This also applies to existing events, and their expiry will be set during the migration. timeout of 1 Year. This also applies to existing events, and their expiry will be set during the migration.
- New UI - New UI
While the UI mostly looks the same, under the hood a lot has changed. The Web UI is now a Single-page application based on rollup and lit-html. This has several consequences and new features, for example: While the UI mostly looks the same, under the hood a lot has changed. The Web UI is now a Single-page application based on rollup and lit-html. This has several consequences and new features, for example:
- You can now see a user's OAuth Access/Refresh tokens and the consents they've given - You can now see a user's OAuth Access/Refresh tokens and the consents they've given
- You can now see a per-object changelog based on the model_create/update/delete events being created. - You can now see a per-object changelog based on the model_create/update/delete events being created.
- A new API Browser is available under `https://authentink.company/api/v2beta/` - A new API Browser is available under `https://authentink.company/api/v2beta/`
- Several new charts, new pages and quality-of-life improvements - Several new charts, new pages and quality-of-life improvements
- Credentials of objects are no longer shown while editing them - Credentials of objects are no longer shown while editing them
- Deprecated Group membership has been removed. - Deprecated Group membership has been removed.
## Minor changes ## Minor changes
- You can now specify the amount of processes started in docker-compose using the `WORKERS` environment variable. - You can now specify the amount of processes started in docker-compose using the `WORKERS` environment variable.
## Fixed in 2021.4.2 ## Fixed in 2021.4.2
- core: fix propertymapping API returning invalid value for components (https://github.com/goauthentik/authentik/issues/746) - core: fix propertymapping API returning invalid value for components (https://github.com/goauthentik/authentik/issues/746)
- core: improve messaging when creating a recovery link for a user when no recovery flow exists - core: improve messaging when creating a recovery link for a user when no recovery flow exists
- flows: annotate flows executor 404 error - flows: annotate flows executor 404 error
- flows: include configure_flow in stages API - flows: include configure_flow in stages API
- helm: make storage class, size and mode configurable - helm: make storage class, size and mode configurable
- helm: turn off monitoring by default (https://github.com/goauthentik/authentik/issues/741) - helm: turn off monitoring by default (https://github.com/goauthentik/authentik/issues/741)
- outposts: fix errors when creating multiple outposts - outposts: fix errors when creating multiple outposts
- root: add restart: unless-stopped to compose - root: add restart: unless-stopped to compose
- root: base Websocket message storage on Base not fallback - root: base Websocket message storage on Base not fallback
- root: fix healthcheck part in docker-compose - root: fix healthcheck part in docker-compose
- root: fix setting of EMAIL_USE_TLS and EMAIL_USE_SSL - root: fix setting of EMAIL_USE_TLS and EMAIL_USE_SSL
- sources/ldap: improve error handling during sync - sources/ldap: improve error handling during sync
- sources/oauth: fix error when creating an oauth source which has fixed URLs - sources/oauth: fix error when creating an oauth source which has fixed URLs
- sources/oauth: fix resolution of sources' provider type - sources/oauth: fix resolution of sources' provider type
- web: fix background-color on router outlet on light mode - web: fix background-color on router outlet on light mode
- web/admin: fix error when user doesn't have permissions to read source - web/admin: fix error when user doesn't have permissions to read source
- web/admin: fix errors in user profile when non-superuser - web/admin: fix errors in user profile when non-superuser
## Fixed in 2021.4.3 ## Fixed in 2021.4.3
- *: add model_name to TypeCreate API to distinguish between models sharing a component - \*: add model_name to TypeCreate API to distinguish between models sharing a component
- api: fix CSRF error when using POST/PATCH/PUT in API Browser - api: fix CSRF error when using POST/PATCH/PUT in API Browser
- api: make 401 messages clearer - api: make 401 messages clearer
- api: mount outposts under outposts/instances to match flows - api: mount outposts under outposts/instances to match flows
- core: add parameter to output property mapping test result formatted - core: add parameter to output property mapping test result formatted
- core: add superuser_full_list to applications list, shows all applications when superuser - core: add superuser_full_list to applications list, shows all applications when superuser
- core: fix Tokens being created with incorrect intent by default - core: fix Tokens being created with incorrect intent by default
- outposts: don't run outpost_controller when no service connection is set - outposts: don't run outpost_controller when no service connection is set
- providers/oauth2: Set CORS Headers for token endpoint, check Origin header against redirect URLs - providers/oauth2: Set CORS Headers for token endpoint, check Origin header against redirect URLs
- root: auto-migrate on startup, lock database using pg_advisory_lock - root: auto-migrate on startup, lock database using pg_advisory_lock
- sources/oauth: add login with plex support - sources/oauth: add login with plex support
- sources/oauth: fix redirect loop for source with non-configurable URLs - sources/oauth: fix redirect loop for source with non-configurable URLs
- sources/oauth: save null instead of empty string for sources without configurable URLs - sources/oauth: save null instead of empty string for sources without configurable URLs
- web/admin: add ability to add users to a group whilst creating a group - web/admin: add ability to add users to a group whilst creating a group
- web/admin: fix default for codemirror - web/admin: fix default for codemirror
- web/admin: fix group member table order - web/admin: fix group member table order
- web/admin: fix non-matching provider type being selected when creating an OAuth Source - web/admin: fix non-matching provider type being selected when creating an OAuth Source
- web/admin: fix provider type resetting when changing provider type - web/admin: fix provider type resetting when changing provider type
- web/admin: fix undefined being shown when viewing application - web/admin: fix undefined being shown when viewing application
- web/admin: improve default selection for property-mappings - web/admin: improve default selection for property-mappings
## Fixed in 2021.4.4 ## Fixed in 2021.4.4
- *: make tasks run every 60 minutes not :00 every hour - \*: make tasks run every 60 minutes not :00 every hour
- outposts: check for X-Forwarded-Host to switch context - outposts: check for X-Forwarded-Host to switch context
- outposts: improve update performance - outposts: improve update performance
- outposts: move local connection check to task, run every 60 minutes - outposts: move local connection check to task, run every 60 minutes
- providers/oauth2: add proper support for non-http schemes as redirect URIs - providers/oauth2: add proper support for non-http schemes as redirect URIs
- providers/oauth2: fix TokenView not having CORS headers set even with proper Origin - providers/oauth2: fix TokenView not having CORS headers set even with proper Origin
- sources/oauth: fix error whilst fetching user profile when source uses fixed URLs - sources/oauth: fix error whilst fetching user profile when source uses fixed URLs
- sources/oauth: handle error in AzureAD when ID Can't be extracted - sources/oauth: handle error in AzureAD when ID Can't be extracted
- stages/user_login: add default backend - stages/user_login: add default backend
- web: fix title not being loaded from config - web: fix title not being loaded from config
- web: only report http errors for 500 and above - web: only report http errors for 500 and above
- web: send response info when response is thrown - web: send response info when response is thrown
- web/admin: add description for fields in proxy provider form - web/admin: add description for fields in proxy provider form
- web/admin: adjust phrasing of cards on overview page - web/admin: adjust phrasing of cards on overview page
- web/admin: fix display for user supseruser status - web/admin: fix display for user supseruser status
- web/admin: fix error when me() returns 403 - web/admin: fix error when me() returns 403
- web/admin: fix error when updating identification stage - web/admin: fix error when updating identification stage
- web/admin: fix invalid group member count - web/admin: fix invalid group member count
- web/admin: fix link to providers on overview page - web/admin: fix link to providers on overview page
- web/admin: fix mismatched required tags - web/admin: fix mismatched required tags
- web/admin: improve phrasing for Policy bindings - web/admin: improve phrasing for Policy bindings
- web/admin: only allow policies to be bound to sources as users/groups cannot be checked - web/admin: only allow policies to be bound to sources as users/groups cannot be checked
- web/admin: only pre-select items when creating a new object - web/admin: only pre-select items when creating a new object
- web/flows: fix Sentry not being loaded correctly - web/flows: fix Sentry not being loaded correctly
## Fixed in 2021.4.5 ## Fixed in 2021.4.5
- core: fix text on error pages being hard to read - core: fix text on error pages being hard to read
- outposts: only kill docker container if its running - outposts: only kill docker container if its running
- root: add middleware to properly report websocket connection to sentry - root: add middleware to properly report websocket connection to sentry
- root: don't use .error of structlog to not send to sentry - root: don't use .error of structlog to not send to sentry
- stages/email: catch ValueError when global email settings are invalid - stages/email: catch ValueError when global email settings are invalid
- stages/invitation: accept token from prompt_data - stages/invitation: accept token from prompt_data
- stages/invitation: fix token not being loaded correctly from query string - stages/invitation: fix token not being loaded correctly from query string
- web: fix text-colour for form help text - web: fix text-colour for form help text
- web: ignore network errors for sentry - web: ignore network errors for sentry
- web/admin: don't show docker certs as required - web/admin: don't show docker certs as required
- web/flows: fix redirect loop when sentry is enabled on flow views - web/flows: fix redirect loop when sentry is enabled on flow views
- web/flows: include ShadyDOM, always enable ShadyDOM for flow interface, improve compatibility with password - web/flows: include ShadyDOM, always enable ShadyDOM for flow interface, improve compatibility with password
- web/flows/identification: fix phrasing account recovery - web/flows/identification: fix phrasing account recovery
## Upgrading ## Upgrading

View file

@ -5,7 +5,7 @@ slug: "2021.5"
## Headline Changes ## Headline Changes
- LDAP Provider - LDAP Provider
:::info :::info
This feature is still in technical preview, so please report any Bugs you run into on [GitHub](https://github.com/goauthentik/authentik/issues) This feature is still in technical preview, so please report any Bugs you run into on [GitHub](https://github.com/goauthentik/authentik/issues)
@ -17,85 +17,85 @@ This feature is still in technical preview, so please report any Bugs you run in
Binding against the LDAP Server uses a flow in the background. This allows you to use the same policies and flows as you do for web-based logins. The only limitation is that currently only identification and password stages are supported, due to how LDAP works. Binding against the LDAP Server uses a flow in the background. This allows you to use the same policies and flows as you do for web-based logins. The only limitation is that currently only identification and password stages are supported, due to how LDAP works.
- Compatibility with forwardAuth/auth_request - Compatibility with forwardAuth/auth_request
The authentik proxy is now compatible with forwardAuth (traefik) / auth_request (nginx). All that is required is the latest version of the outpost, The authentik proxy is now compatible with forwardAuth (traefik) / auth_request (nginx). All that is required is the latest version of the outpost,
and the correct config from [here](../providers/proxy/forward_auth.mdx). and the correct config from [here](../providers/proxy/forward_auth.mdx).
- Docker images for ARM - Docker images for ARM
Docker images are now built for amd64 and arm64. Docker images are now built for amd64 and arm64.
- Reduced setup complexity - Reduced setup complexity
The authentik server now requires less containers. The static container (as well as the traefik when using docker-compose) are no longer required. As the first stage of a migration to Golang instead of Python, authentik now runs behind an in-container reverse proxy, which hosts the static files. The authentik server now requires less containers. The static container (as well as the traefik when using docker-compose) are no longer required. As the first stage of a migration to Golang instead of Python, authentik now runs behind an in-container reverse proxy, which hosts the static files.
- New Plex authentication source - New Plex authentication source
The plex source (previously a provider for the OAuth Source) has been rewritten to a dedicated Source. The plex source (previously a provider for the OAuth Source) has been rewritten to a dedicated Source.
You can now limit access to authentik based on which servers a Plex user is member of. You can now limit access to authentik based on which servers a Plex user is member of.
- Configurable source behaviour - Configurable source behaviour
You can now configure how a source behaves after the user has authenticated themselves to the source. Previously, authentik always checked the unique identifier from the source, enrolled the user when the identifier didn't exist and authenticated the user otherwise. You can now configure how a source behaves after the user has authenticated themselves to the source. Previously, authentik always checked the unique identifier from the source, enrolled the user when the identifier didn't exist and authenticated the user otherwise.
Now you can configure how the matching should be done: Now you can configure how the matching should be done:
- Identifier: Keeps the old behaviour, can lead to duplicate user accounts - Identifier: Keeps the old behaviour, can lead to duplicate user accounts
- Email (link): If a user with the same Email address exists, they are linked. Can have security implications when a source doesn't validate email addresses. - Email (link): If a user with the same Email address exists, they are linked. Can have security implications when a source doesn't validate email addresses.
- Email (deny): Deny the flow if the Email address is already used. - Email (deny): Deny the flow if the Email address is already used.
- Username (link): If a user with the same username address exists, they are linked. Can have security implications when a username is used with another source. - Username (link): If a user with the same username address exists, they are linked. Can have security implications when a username is used with another source.
- Username (deny): Deny the flow if the username address is already used. - Username (deny): Deny the flow if the username address is already used.
## Minor changes ## Minor changes
- Improved compatibility of the flow interface with password managers. - Improved compatibility of the flow interface with password managers.
- Improved compatibility when using SAML Sources with a redirect binding. - Improved compatibility when using SAML Sources with a redirect binding.
- Improved configurability of outpost docker image name for managed Outposts. - Improved configurability of outpost docker image name for managed Outposts.
- Add customization of access code validity for OAuth2 Providers. - Add customization of access code validity for OAuth2 Providers.
- Add ability to configure no login fields on identification stage to only allow logins with Sources. - Add ability to configure no login fields on identification stage to only allow logins with Sources.
- Add single-use flag for invitations to delete token after use. - Add single-use flag for invitations to delete token after use.
- Fix sidebar not collapsible on mobile. - Fix sidebar not collapsible on mobile.
## Fixed in 2021.5.2 ## Fixed in 2021.5.2
- core: fix application's slug field not being set to unique - core: fix application's slug field not being set to unique
- flows: fix error when using cancel flow - flows: fix error when using cancel flow
- lib: Fix config loading of secrets from files (#887) - lib: Fix config loading of secrets from files (#887)
- lib: fix parsing of remote IP header when behind multiple reverse proxies - lib: fix parsing of remote IP header when behind multiple reverse proxies
- lifecycle: check if group of docker socket exists - lifecycle: check if group of docker socket exists
- lifecycle: fix error when worker is not running as root - lifecycle: fix error when worker is not running as root
- outposts: fix error when controller loads from cache but cache has expired - outposts: fix error when controller loads from cache but cache has expired
- outposts: fix missing default for OutpostState.for_channel - outposts: fix missing default for OutpostState.for_channel
- outposts: fix reload notification not working due to wrong ID being cached - outposts: fix reload notification not working due to wrong ID being cached
- outposts/ldap: fix AUTHENTIK_INSECURE not being respected for API client during bind - outposts/ldap: fix AUTHENTIK_INSECURE not being respected for API client during bind
- outposts/proxy: fix error redeeming code when using non-standard ports - outposts/proxy: fix error redeeming code when using non-standard ports
- outposts/proxy: fix insecure TLS Skip - outposts/proxy: fix insecure TLS Skip
- providers/ldap: use username instead of name for user dn (#883) - providers/ldap: use username instead of name for user dn (#883)
- providers/proxy: connect ingress to https instead of http - providers/proxy: connect ingress to https instead of http
- root: only load debug secret key when debug is enabled - root: only load debug secret key when debug is enabled
- web: fix chunks overwriting each other - web: fix chunks overwriting each other
- web/admin: add notice for LDAP Provider's group selection - web/admin: add notice for LDAP Provider's group selection
- web/admin: fix PropertyMappings not loading correctly - web/admin: fix PropertyMappings not loading correctly
- website/docs: add example ldapsearch command - website/docs: add example ldapsearch command
## Fixed in 2021.5.3 ## Fixed in 2021.5.3
- outposts: fix update signal not being sent to correct instances - outposts: fix update signal not being sent to correct instances
- providers/oauth2: fix double login required when prompt=login - providers/oauth2: fix double login required when prompt=login
- providers/proxy: fix redirect_uris not always being set on save - providers/proxy: fix redirect_uris not always being set on save
- sources/plex: force setting of plex token - sources/plex: force setting of plex token
- web: fix t.reset is not a function - web: fix t.reset is not a function
- web: remove nginx config, add caching headers to static files - web: remove nginx config, add caching headers to static files
- web/admin: fix flow form not loading data - web/admin: fix flow form not loading data
## Fixed in 2021.5.4 ## Fixed in 2021.5.4
- providers/oauth2: add missing kid header to JWT Tokens - providers/oauth2: add missing kid header to JWT Tokens
- stages/authenticator_*: fix Permission Error when disabling Authenticator as non-superuser - stages/authenticator\_\*: fix Permission Error when disabling Authenticator as non-superuser
- web: fix missing flow and policy cache clearing UI - web: fix missing flow and policy cache clearing UI
- web: set x-forwarded-proto based on upstream TLS Status - web: set x-forwarded-proto based on upstream TLS Status
## Upgrading ## Upgrading

View file

@ -5,161 +5,161 @@ slug: "2021.6"
## Headline Changes ## Headline Changes
- Duo two-factor support - Duo two-factor support
You can now add the new `authenticator_duo` stage to configure Duo authenticators. Duo has also been added as device class to the `authenticator_validation` stage. You can now add the new `authenticator_duo` stage to configure Duo authenticators. Duo has also been added as device class to the `authenticator_validation` stage.
Currently, only Duo push notifications are supported. Because no additional input is required, Duo also works with the LDAP Outpost. Currently, only Duo push notifications are supported. Because no additional input is required, Duo also works with the LDAP Outpost.
- Multi-tenancy - Multi-tenancy
This version adds soft multi-tenancy. This means you can configure different branding settings and different default flows per domain. This version adds soft multi-tenancy. This means you can configure different branding settings and different default flows per domain.
This also changes how a default flow is determined. Previously, for defaults flow, authentik would pick the first flow that This also changes how a default flow is determined. Previously, for defaults flow, authentik would pick the first flow that
- matches the required designation - matches the required designation
- comes first sorted by slug - comes first sorted by slug
- is allowed by policies - is allowed by policies
Now, authentik first checks if the current tenant has a default flow configured for the selected designation. If not, it behaves the same as before, meaning that if you want to select a default flow based on policy, you can just leave the tenant default empty. Now, authentik first checks if the current tenant has a default flow configured for the selected designation. If not, it behaves the same as before, meaning that if you want to select a default flow based on policy, you can just leave the tenant default empty.
- Domain-level authorization with proxy providers - Domain-level authorization with proxy providers
Instead of simply being able to toggle between forward auth and proxy mode, you can now enable forward auth for an entire domain. This has the downside that you can't do per-application authorization, but also simplifies configuration as you don't have to create each application in authentik. Instead of simply being able to toggle between forward auth and proxy mode, you can now enable forward auth for an entire domain. This has the downside that you can't do per-application authorization, but also simplifies configuration as you don't have to create each application in authentik.
- API Schema now uses OpenAPI v3 - API Schema now uses OpenAPI v3
The API endpoints are mostly the same, however all the clients are now built from an OpenAPI v3 schema. You can retrieve the schema from `authentik.company.tld/api/v2beta/schema/` The API endpoints are mostly the same, however all the clients are now built from an OpenAPI v3 schema. You can retrieve the schema from `authentik.company.tld/api/v2beta/schema/`
- On Kubernetes installs without a /media PVC, you can now set URLs instead of uploading files. - On Kubernetes installs without a /media PVC, you can now set URLs instead of uploading files.
- Expanded prometheus metrics for PolicyEngine and FlowPlanner - Expanded prometheus metrics for PolicyEngine and FlowPlanner
## Minor changes ## Minor changes
- You can now specify which sources should be shown on an Identification stage. - You can now specify which sources should be shown on an Identification stage.
- Add UI for the reputation of IPs and usernames for reputation policies. - Add UI for the reputation of IPs and usernames for reputation policies.
- Fix proxy outpost not being able to redeem tokens when using with an un-trusted SSL Certificate - Fix proxy outpost not being able to redeem tokens when using with an un-trusted SSL Certificate
- Add UI to check access of any application for any user - Add UI to check access of any application for any user
## Fixed in 2021.6.1-rc5 ## Fixed in 2021.6.1-rc5
- flows: fix configuration URL being set when no flow is configure - flows: fix configuration URL being set when no flow is configure
- stages/authenticator_totp: set TOTP issuer based on slug'd tenant title - stages/authenticator_totp: set TOTP issuer based on slug'd tenant title
- stages/authenticator_webauthn: use tenant title as RP_NAME - stages/authenticator_webauthn: use tenant title as RP_NAME
- stages/identification: add UPN - stages/identification: add UPN
- stages/password: add constants for password backends - stages/password: add constants for password backends
- web: fix flow download link - web: fix flow download link
## Fixed in 2021.6.1-rc6 ## Fixed in 2021.6.1-rc6
- ci: build and push stable tag when rc not in release name - ci: build and push stable tag when rc not in release name
- core: delete real session when AuthenticatedSession is deleted - core: delete real session when AuthenticatedSession is deleted
- core: fix impersonation not working with inactive users - core: fix impersonation not working with inactive users
- core: fix upload api not checking clear properly - core: fix upload api not checking clear properly
- core: revert check_access API to get to prevent CSRF errors - core: revert check_access API to get to prevent CSRF errors
- events: add tenant to event - events: add tenant to event
- events: catch unhandled exceptions from request as event, add button to open github issue - events: catch unhandled exceptions from request as event, add button to open github issue
- flows: fix error clearing flow background when no files have been uploaded - flows: fix error clearing flow background when no files have been uploaded
- outpost: fix syntax error when creating an outpost with connection - outpost: fix syntax error when creating an outpost with connection
- outposts: fix integrity error with tokens - outposts: fix integrity error with tokens
- outposts/ldap: improve responses for unsuccessful binds - outposts/ldap: improve responses for unsuccessful binds
- policies/reputation: fix race condition in tests - policies/reputation: fix race condition in tests
- provider/proxy: mark forward_auth flag as deprecated - provider/proxy: mark forward_auth flag as deprecated
- providers/saml: improve error handling for signature errors - providers/saml: improve error handling for signature errors
- root: fix build_hash being set incorrectly for tagged versions - root: fix build_hash being set incorrectly for tagged versions
- sources/saml: check sessions before deleting user - sources/saml: check sessions before deleting user
- stages/authenticator_duo: don't create default duo stage - stages/authenticator_duo: don't create default duo stage
- stages/authenticator_validate: add tests for authenticator validation - stages/authenticator_validate: add tests for authenticator validation
- stages/identification: fix challenges not being annotated correctly and API client not loading data correctly - stages/identification: fix challenges not being annotated correctly and API client not loading data correctly
- web: add capabilities to sentry event - web: add capabilities to sentry event
- web: migrate banner to sidebar - web: migrate banner to sidebar
- web/admin: fix user enable/disable modal not matching other modals - web/admin: fix user enable/disable modal not matching other modals
- web/admin: select service connection by default when only one exists - web/admin: select service connection by default when only one exists
- web/flows: fix expiry not shown on consent stage when loading - web/flows: fix expiry not shown on consent stage when loading
- web/flows: fix IdentificationStage's label not matching fields - web/flows: fix IdentificationStage's label not matching fields
- web/flows: improve display of allowed fields for identification stage - web/flows: improve display of allowed fields for identification stage
- website/docs: add docs for outpost configuration - website/docs: add docs for outpost configuration
## Fixed in 2021.6.1 ## Fixed in 2021.6.1
- core: fix error getting stages when enrollment flow isn't set - core: fix error getting stages when enrollment flow isn't set
- core: fix error when creating AuthenticatedSession without key - core: fix error when creating AuthenticatedSession without key
- flows: fix error when stage has incorrect type - flows: fix error when stage has incorrect type
- providers/saml: add support for NameID type unspecified - providers/saml: add support for NameID type unspecified
- providers/saml: fix error when getting transient user identifier - providers/saml: fix error when getting transient user identifier
- providers/saml: fix NameIDPolicy not being parsed correctly - providers/saml: fix NameIDPolicy not being parsed correctly
- recovery: fix error when creating multiple keys for the same user - recovery: fix error when creating multiple keys for the same user
- stages/authenticator_duo: fix error when enrolling an existing user - stages/authenticator_duo: fix error when enrolling an existing user
- stages/authenticator_duo: make Duo-admin viewset writeable - stages/authenticator_duo: make Duo-admin viewset writeable
- website/docs: remove migrate command - website/docs: remove migrate command
## Fixed in 2021.6.2 ## Fixed in 2021.6.2
- core: add support for custom urls for avatars - core: add support for custom urls for avatars
- core: deepmerge user.group_attributes, use group_attributes for user settings - core: deepmerge user.group_attributes, use group_attributes for user settings
- core: fix PropertyMapping's globals not matching Expression policy - core: fix PropertyMapping's globals not matching Expression policy
- core: remove default flow background from default css, set static in base_full and dynamically in if/flow - core: remove default flow background from default css, set static in base_full and dynamically in if/flow
- crypto: catch error when loading private key - crypto: catch error when loading private key
- flows: make flow plan cache timeout configurable - flows: make flow plan cache timeout configurable
- outposts: fix port and inner_port being mixed on docker controller - outposts: fix port and inner_port being mixed on docker controller
- outposts/proxy: fix additionalHeaders not being set properly - outposts/proxy: fix additionalHeaders not being set properly
- policies: don't use policy cache when checking application access - policies: don't use policy cache when checking application access
- policies: make policy result cache timeout configurable - policies: make policy result cache timeout configurable
- root: allow loading local /static files without debug flag - root: allow loading local /static files without debug flag
- root: make general cache timeouts configurable - root: make general cache timeouts configurable
- root: remove old traefik labels - root: remove old traefik labels
- root: save temporary database dump in /tmp - root: save temporary database dump in /tmp
- root: set outposts.docker_image_base to gh-master for tests - root: set outposts.docker_image_base to gh-master for tests
- stages/authenticator_validate: fix error when using not_configured_action=configure - stages/authenticator_validate: fix error when using not_configured_action=configure
- tenants: fix tenant not being queried correctly when using accessing over a child domain - tenants: fix tenant not being queried correctly when using accessing over a child domain
- web/admin: fix tenant's default flag not being saved - web/admin: fix tenant's default flag not being saved
- web/admin: handle elements in slot=form not being forms - web/admin: handle elements in slot=form not being forms
- web/admin: sort inputs on authenticator validation stage form - web/admin: sort inputs on authenticator validation stage form
## Fixed in 2021.6.3 ## Fixed in 2021.6.3
- api: use partition instead of split for token - api: use partition instead of split for token
- core: fix flow background not correctly loading on initial draw - core: fix flow background not correctly loading on initial draw
- events: add ability to create events via API - events: add ability to create events via API
- events: ignore notification non-existent in transport - events: ignore notification non-existent in transport
- events: only create SYSTEM_EXCEPTION event when error would've been sent to sentry - events: only create SYSTEM_EXCEPTION event when error would've been sent to sentry
- expressions: fix regex_match result being inverted - expressions: fix regex_match result being inverted
- flows: add FlowStageBinding to flow plan instead of just stage - flows: add FlowStageBinding to flow plan instead of just stage
- flows: add invalid_response_action to configure how the FlowExecutor should handle invalid responses - flows: add invalid_response_action to configure how the FlowExecutor should handle invalid responses
- flows: handle possible errors with FlowPlans received from cache - flows: handle possible errors with FlowPlans received from cache
- outposts: check docker container ports match - outposts: check docker container ports match
- outposts/ldap: fixed IsActive and IsSuperuser returning swapped incorrect values (#1078) - outposts/ldap: fixed IsActive and IsSuperuser returning swapped incorrect values (#1078)
- providers/oauth2: fix exp of JWT when not using seconds - providers/oauth2: fix exp of JWT when not using seconds
- sources/ldap: improve error handling when checking for password complexity on non-ad setups - sources/ldap: improve error handling when checking for password complexity on non-ad setups
- stages/authenticator_duo: fix component not being set in API - stages/authenticator_duo: fix component not being set in API
- stages/prompt: ensure hidden and static fields keep the value they had set - stages/prompt: ensure hidden and static fields keep the value they had set
- stages/user_write: add flag to create new users as inactive - stages/user_write: add flag to create new users as inactive
- tenants: include all default flows in current_tenant - tenants: include all default flows in current_tenant
- web/admin: fix deletion of authenticator not reloading the state correctly - web/admin: fix deletion of authenticator not reloading the state correctly
- web/admin: fix only recovery flows being selectable for unenrollment flow in tenant form - web/admin: fix only recovery flows being selectable for unenrollment flow in tenant form
- web/admin: fix text color on pf-c-card - web/admin: fix text color on pf-c-card
## Fixed in 2021.6.4 ## Fixed in 2021.6.4
- core: only show `Reset password` link when recovery flow is configured - core: only show `Reset password` link when recovery flow is configured
- crypto: show both sha1 and sha256 fingerprints - crypto: show both sha1 and sha256 fingerprints
- flows: handle old cached flow plans better - flows: handle old cached flow plans better
- g: fix static and media caching not working properly - g: fix static and media caching not working properly
- outposts: fix container not being started after creation - outposts: fix container not being started after creation
- outposts: fix docker controller not checking env correctly - outposts: fix docker controller not checking env correctly
- outposts: fix docker controller not checking ports correctly - outposts: fix docker controller not checking ports correctly
- outposts: fix empty message when docker outpost controller has changed nothing - outposts: fix empty message when docker outpost controller has changed nothing
- outposts: fix permissions not being set correctly upon outpost creation - outposts: fix permissions not being set correctly upon outpost creation
- outposts/ldap: add support for boolean fields in ldap - outposts/ldap: add support for boolean fields in ldap
- outposts/proxy: always redirect to session-end interface on sign_out - outposts/proxy: always redirect to session-end interface on sign_out
- providers/oauth2: add revoked field, create suspicious event when previous token is used - providers/oauth2: add revoked field, create suspicious event when previous token is used
- providers/oauth2: deepmerge claims - providers/oauth2: deepmerge claims
- providers/oauth2: fix CORS headers not being set for unsuccessful requests - providers/oauth2: fix CORS headers not being set for unsuccessful requests
- providers/oauth2: use self.expires for exp field instead of calculating it again - providers/oauth2: use self.expires for exp field instead of calculating it again
- sources/oauth: create configuration error event when profile can't be parsed as json - sources/oauth: create configuration error event when profile can't be parsed as json
- stages/user_write: add wrapper for post to user_write - stages/user_write: add wrapper for post to user_write
- web/admin: fix ModelForm not re-loading after being reset - web/admin: fix ModelForm not re-loading after being reset
- web/admin: show oauth2 token revoked status - web/admin: show oauth2 token revoked status
## Upgrading ## Upgrading

View file

@ -5,107 +5,107 @@ slug: "2021.7"
## Headline Changes ## Headline Changes
- SSL Support for LDAP Providers - SSL Support for LDAP Providers
You can now configure certificates for your LDAP Providers, meaning that all communication will be done encrypted. You can now configure certificates for your LDAP Providers, meaning that all communication will be done encrypted.
Currently, only SSL on port 636 is supported, not StartTLS. Currently, only SSL on port 636 is supported, not StartTLS.
- Add bundled docs - Add bundled docs
You can now browse the authentik docs for your version by browsing to `/help`. This means you don't have to rely on an You can now browse the authentik docs for your version by browsing to `/help`. This means you don't have to rely on an
internet connection to check the docs, and you also have the correct docs for your currently running version. internet connection to check the docs, and you also have the correct docs for your currently running version.
## Minor changes ## Minor changes
- api: Tunnel Sentry requests through authentik to prevent them being blocked by ad-blockers - api: Tunnel Sentry requests through authentik to prevent them being blocked by ad-blockers
- core: fix error when setting icon/background to url longer than 100 chars - core: fix error when setting icon/background to url longer than 100 chars
- events: fix error when slack notification request failed without a response - events: fix error when slack notification request failed without a response
- flows: allow variable substitution in flow titles - flows: allow variable substitution in flow titles
- outposts/ldap: Fix LDAP outpost missing a `member` field on groups with all member DNs - outposts/ldap: Fix LDAP outpost missing a `member` field on groups with all member DNs
- outposts/ldap: Fix LDAP outpost not parsing arrays from user and group attributes correctly - outposts/ldap: Fix LDAP outpost not parsing arrays from user and group attributes correctly
- providers/oauth2: allow blank redirect_uris to allow any redirect_uri - providers/oauth2: allow blank redirect_uris to allow any redirect_uri
- providers/saml: fix parsing of POST bindings - providers/saml: fix parsing of POST bindings
- root: add PROXY protocol support for http, https, ldap and ldaps servers - root: add PROXY protocol support for http, https, ldap and ldaps servers
- root: Allow configuration of Redis port - root: Allow configuration of Redis port
- root: set samesite to None for SAML POST flows - root: set samesite to None for SAML POST flows
- root: subclass SessionMiddleware to set Secure and SameSite flag depending on context - root: subclass SessionMiddleware to set Secure and SameSite flag depending on context
- web: fix error when showing error message of request - web: fix error when showing error message of request
## Fixed in 2021.7.1-rc2 ## Fixed in 2021.7.1-rc2
- core: add email filter for user - core: add email filter for user
- core: add group filter by member username and pk - core: add group filter by member username and pk
- core: broaden error catching for propertymappings - core: broaden error catching for propertymappings
- lib: fix outpost fake-ip not working, add tests - lib: fix outpost fake-ip not working, add tests
- outpost: fix 100% CPU Usage when not connected to websocket - outpost: fix 100% CPU Usage when not connected to websocket
- outposts: ensure outpost SAs always have permissions to fake IP - outposts: ensure outpost SAs always have permissions to fake IP
- outposts: fix git hash not being set in outposts - outposts: fix git hash not being set in outposts
- outposts: save certificate fingerprint and check before re-fetching to cleanup logs - outposts: save certificate fingerprint and check before re-fetching to cleanup logs
- outposts/ldap: add tracing for LDAP bind and search - outposts/ldap: add tracing for LDAP bind and search
- outposts/ldap: improve parsing of LDAP filters - outposts/ldap: improve parsing of LDAP filters
- outposts/ldap: optimise backend Search API requests - outposts/ldap: optimise backend Search API requests
- outposts/proxy: add X-Auth-Groups header to pass groups - outposts/proxy: add X-Auth-Groups header to pass groups
- providers/oauth2: handler PropertyMapping exceptions and create event - providers/oauth2: handler PropertyMapping exceptions and create event
- providers/saml: improve error handling for property mappings - providers/saml: improve error handling for property mappings
- sources/ldap: improve error handling for property mappings - sources/ldap: improve error handling for property mappings
- web: fix icon flashing in header, fix notification header icon in dark mode - web: fix icon flashing in header, fix notification header icon in dark mode
- web: separate websocket connection from messages - web: separate websocket connection from messages
- web/admin: fix missing dark theme for notifications - web/admin: fix missing dark theme for notifications
- web/admin: fix negative count for policies when more cached than total policies - web/admin: fix negative count for policies when more cached than total policies
- web/admin: improve UI for notification toggle - web/admin: improve UI for notification toggle
- website/docs: clear up outpost uuids - website/docs: clear up outpost uuids
- website/docs: remove duplicate proxy docs - website/docs: remove duplicate proxy docs
## Fixed in 2021.7.1 ## Fixed in 2021.7.1
- core: add tests for flow_manager - core: add tests for flow_manager
- core: fix CheckApplication's for_user flag not being checked correctly - core: fix CheckApplication's for_user flag not being checked correctly
- core: fix pagination not working correctly with applications API - core: fix pagination not working correctly with applications API
- providers/oauth2: fix blank redirect_uri not working with TokenView - providers/oauth2: fix blank redirect_uri not working with TokenView
- root: add code of conduct and PR template - root: add code of conduct and PR template
- root: add contributing file - root: add contributing file
- tenants: make event retention configurable on tenant level - tenants: make event retention configurable on tenant level
- tenants: set tenant uuid in sentry - tenants: set tenant uuid in sentry
- web/admin: add notice for event_retention - web/admin: add notice for event_retention
- web/admin: add status card for https and timedrift - web/admin: add status card for https and timedrift
- web/admin: default to authentication flow for LDAP provider - web/admin: default to authentication flow for LDAP provider
- web/admin: fix ApplicationView's CheckAccess not sending UserID correctly - web/admin: fix ApplicationView's CheckAccess not sending UserID correctly
- website/docs: add go requirement - website/docs: add go requirement
- website/docs: update terminology for dark mode - website/docs: update terminology for dark mode
## Fixed in 2021.7.2 ## Fixed in 2021.7.2
- ci: fix sentry sourcemap path - ci: fix sentry sourcemap path
- e2e: fix broken selenium by locking images - e2e: fix broken selenium by locking images
- events: ensure fallback result is set for on_failure - events: ensure fallback result is set for on_failure
- events: remove default result for MonitoredTasks, only save when result was set - events: remove default result for MonitoredTasks, only save when result was set
- flows: don't check redirect URL when set from flow plan (set from authentik or policy) - flows: don't check redirect URL when set from flow plan (set from authentik or policy)
- flows: fix unhandled error in stage execution not being logged as SYSTEM_EXCEPTION event - flows: fix unhandled error in stage execution not being logged as SYSTEM_EXCEPTION event
- outpost: bump timer for periodic config reloads - outpost: bump timer for periodic config reloads
- outposts: catch invalid ServiceConnection error in outpost controller - outposts: catch invalid ServiceConnection error in outpost controller
- providers/oauth2: fix error when requesting jwks keys with no rs256 aet - providers/oauth2: fix error when requesting jwks keys with no rs256 aet
- providers/proxy: fix hosts for ingress not being compared correctly - providers/proxy: fix hosts for ingress not being compared correctly
- providers/saml: fix Error when getting metadata for invalid ID - providers/saml: fix Error when getting metadata for invalid ID
- providers/saml: fix metadata being inaccessible without authentication - providers/saml: fix metadata being inaccessible without authentication
- sources/ldap: improve ms-ad password complexity checking - sources/ldap: improve ms-ad password complexity checking
- sources/plex: add background task to monitor validity of plex token - sources/plex: add background task to monitor validity of plex token
- stages/email: fix error when re-requesting email after token has expired - stages/email: fix error when re-requesting email after token has expired
- stages/invitation: delete invite only after full enrollment flow is completed - stages/invitation: delete invite only after full enrollment flow is completed
- web/admin: add re-authenticate button for plex - web/admin: add re-authenticate button for plex
- web/admin: add UI to copy invitation link - web/admin: add UI to copy invitation link
- web/admin: fix empty column when no invitation expiry was set - web/admin: fix empty column when no invitation expiry was set
- web/admin: fix LDAP Provider bind flow list being empty - web/admin: fix LDAP Provider bind flow list being empty
- web/admin: fully remove response cloning due to errors - web/admin: fully remove response cloning due to errors
## Fixed in 2021.7.3 ## Fixed in 2021.7.3
- core: fix users not being able to update their profile - core: fix users not being able to update their profile
- lifecycle: decrease default worker count on compose - lifecycle: decrease default worker count on compose
- providers/saml: fix error when WantAssertionsSigned is missing - providers/saml: fix error when WantAssertionsSigned is missing
- providers/saml: fix error when PropertyMapping return value isn't string - providers/saml: fix error when PropertyMapping return value isn't string
- web/admin: fix user's email field being required - web/admin: fix user's email field being required
- web/admin: fix source form's userMatchingMode being swapped - web/admin: fix source form's userMatchingMode being swapped
## Upgrading ## Upgrading

View file

@ -5,14 +5,14 @@ slug: "2021.8"
## Headline Changes ## Headline Changes
- Embedded Outpost - Embedded Outpost
To simplify the setup, an embedded outpost has been added. This outpost runs as part of the main authentik server, and requires no additional setup. To simplify the setup, an embedded outpost has been added. This outpost runs as part of the main authentik server, and requires no additional setup.
You can simply assign providers to the embedded outpost, and either use the integrations to configure reverse proxies, or point your traffic to the main authentik server. You can simply assign providers to the embedded outpost, and either use the integrations to configure reverse proxies, or point your traffic to the main authentik server.
Traffic is routed based on host-header, meaning every host that has been configured as a provider and is assigned to the embedded proxy will be sent to the outpost, and every sub-path under `/outpost.goauthentik.io` is sent to the outpost too. The rest is sent to authentik itself. Traffic is routed based on host-header, meaning every host that has been configured as a provider and is assigned to the embedded proxy will be sent to the outpost, and every sub-path under `/outpost.goauthentik.io` is sent to the outpost too. The rest is sent to authentik itself.
- App passwords - App passwords
You can now create Tokens with the intent `app_password`, and use them when authenticating with a flow. This requires the `User database + app passwords` backend in your password stage (this is done automatically on upgrade). You can now create Tokens with the intent `app_password`, and use them when authenticating with a flow. This requires the `User database + app passwords` backend in your password stage (this is done automatically on upgrade).
@ -20,122 +20,122 @@ slug: "2021.8"
## Minor changes ## Minor changes
- admin: add API to show embedded outpost status, add notice when its not configured properly - admin: add API to show embedded outpost status, add notice when its not configured properly
- api: ensure all resources can be filtered - api: ensure all resources can be filtered
- api: make all PropertyMappings filterable by multiple managed attributes - api: make all PropertyMappings filterable by multiple managed attributes
- core: add API to directly send recovery link to user - core: add API to directly send recovery link to user
- core: add UserSelfSerializer and separate method for users to update themselves with limited fields - core: add UserSelfSerializer and separate method for users to update themselves with limited fields
- core: allow changing of groups a user is in from user api - core: allow changing of groups a user is in from user api
- flows: fix unhandled error in stage execution not being logged as SYSTEM_EXCEPTION event - flows: fix unhandled error in stage execution not being logged as SYSTEM_EXCEPTION event
- lifecycle: decrease default worker count on compose - lifecycle: decrease default worker count on compose
- outpost/ldap: Performance improvements, support for (member=) lookup - outpost/ldap: Performance improvements, support for (member=) lookup
- providers/proxy: don't create ingress when no hosts are defined - providers/proxy: don't create ingress when no hosts are defined
- sources/plex: add API to get user connections - sources/plex: add API to get user connections
- web: add API Drawer - web: add API Drawer
- web/admin: add UI to copy invitation link - web/admin: add UI to copy invitation link
- web/admin: allow modification of users groups from user view - web/admin: allow modification of users groups from user view
- web/admin: re-name service connection to integration - web/admin: re-name service connection to integration
## Fixed in 2021.8.1-rc2 ## Fixed in 2021.8.1-rc2
- ci: add pipeline to build and push js api package - ci: add pipeline to build and push js api package
- ci: upgrade web api client when schema changes - ci: upgrade web api client when schema changes
- core: add new token intent and auth backend (#1284) - core: add new token intent and auth backend (#1284)
- core: add token tests for invalid intent and token auth - core: add token tests for invalid intent and token auth
- core: fix token intent not defaulting correctly - core: fix token intent not defaulting correctly
- core: handle error when ?for_user is not numberical - core: handle error when ?for_user is not numberical
- lib: move id and key generators to lib (#1286) - lib: move id and key generators to lib (#1286)
- lifecycle: rename to ak - lifecycle: rename to ak
- outpost: handle non-existent permission - outpost: handle non-existent permission
- outpost: add recursion limit for docker controller - outpost: add recursion limit for docker controller
- outpost: add repair_permissions command - outpost: add repair_permissions command
- root: add alias for akflow files - root: add alias for akflow files
- root: add ASGI Error handler - root: add ASGI Error handler
- root: add License to NPM package - root: add License to NPM package
- root: fix error_handler for websocket - root: fix error_handler for websocket
- root: fix mis-matched postgres version for CI - root: fix mis-matched postgres version for CI
- root: remove remainders from gen - root: remove remainders from gen
- root: remove usage of make-gen - root: remove usage of make-gen
- root: test schema auto-update - root: test schema auto-update
- root: update schema - root: update schema
- stages/password: auto-enable app password backend - stages/password: auto-enable app password backend
- stages/user_write: fix wrong fallback authentication backend - stages/user_write: fix wrong fallback authentication backend
- web: add custom readme to api client - web: add custom readme to api client
- web: add ESM to generated Client - web: add ESM to generated Client
- web: build. api in different folder - web: build. api in different folder
- web: improve api client versioning - web: improve api client versioning
- web: Merge pull request #1258 from goauthentik/publish-api-to-npm - web: Merge pull request #1258 from goauthentik/publish-api-to-npm
- web: migrate to @goauthentik/api - web: migrate to @goauthentik/api
- web: Update Web API Client version (#1283) - web: Update Web API Client version (#1283)
- web/admin: allow users to create app password tokens - web/admin: allow users to create app password tokens
- web/admin: display token's intents - web/admin: display token's intents
- web/admin: fix missing app passwords backend - web/admin: fix missing app passwords backend
- web/admin: improve delete modal for stage bindings and policy bindings - web/admin: improve delete modal for stage bindings and policy bindings
- web/admin: select all password stage backends by default - web/admin: select all password stage backends by default
- website: add docs for making schema changes - website: add docs for making schema changes
- website: make default login-2fa flow ignore 2fa with app passwords - website: make default login-2fa flow ignore 2fa with app passwords
- website/docs: add docs for `auth_method` and `auth_method_args` fields - website/docs: add docs for `auth_method` and `auth_method_args` fields
## Fixed in 2021.8.1 ## Fixed in 2021.8.1
- *: cleanup api schema warnings - \*: cleanup api schema warnings
- core: fix error for asgi error handler with websockets - core: fix error for asgi error handler with websockets
- core: fix error when user updates themselves - core: fix error when user updates themselves
- core: fix user object for token not be set-able - core: fix user object for token not be set-able
- root: Fix table of contents for CONTRIBUTING.md (#1302) - root: Fix table of contents for CONTRIBUTING.md (#1302)
- root: Require PG_PASS to be set (#1303) - root: Require PG_PASS to be set (#1303)
- web/admin: allow admins to create tokens - web/admin: allow admins to create tokens
## Fixed in 2021.8.2 ## Fixed in 2021.8.2
- root: fix login loop created by old settings stored in cache - root: fix login loop created by old settings stored in cache
## Fixed in 2021.8.3 ## Fixed in 2021.8.3
- outpost: fix FlowExecutor not sending password for identification stage - outpost: fix FlowExecutor not sending password for identification stage
- outpost: fix generated traefik labels containing invalid hosts - outpost: fix generated traefik labels containing invalid hosts
- outpost: make docker network configurable when using docker integration - outpost: make docker network configurable when using docker integration
- web/flow: fix redirects to application being sent multiple times, causing issues with OAuth providers - web/flow: fix redirects to application being sent multiple times, causing issues with OAuth providers
- web/flow: fix rendering of checkboxes in prompt stages - web/flow: fix rendering of checkboxes in prompt stages
## Fixed in 2021.8.4 ## Fixed in 2021.8.4
- api: add /api/v3 path - api: add /api/v3 path
- api: add basic rate limiting for sentry proxy endpoint - api: add basic rate limiting for sentry proxy endpoint
- core: fix user_obj being empty on token API - core: fix user_obj being empty on token API
- events: improve logging for task exceptions - events: improve logging for task exceptions
- outpost/embedded: only send requests for non-akprox paths when we're doing proxy mode - outpost/embedded: only send requests for non-akprox paths when we're doing proxy mode
- outpost/ldap: delay user information removal upon closing of connection - outpost/ldap: delay user information removal upon closing of connection
- policies/password: fix PasswordStage not being usable with prompt stages - policies/password: fix PasswordStage not being usable with prompt stages
- providers/proxy: fix traefik middleware being generated with wrong ports for embedded outposts - providers/proxy: fix traefik middleware being generated with wrong ports for embedded outposts
- providers/proxy: improve error handling for non-tls ingresses - providers/proxy: improve error handling for non-tls ingresses
- stages/authenticator_validate: show single button for multiple webauthn authenticators - stages/authenticator_validate: show single button for multiple webauthn authenticators
- stages/invitation: fix invitation not inheriting ExpiringModel - stages/invitation: fix invitation not inheriting ExpiringModel
- web/admin: fallback for invitation list on first load - web/admin: fallback for invitation list on first load
- web/admin: fix flow executor not opening in new tab - web/admin: fix flow executor not opening in new tab
- web/admin: fix list of webauthn devices not updating after rename - web/admin: fix list of webauthn devices not updating after rename
- web/flows: fix FlowExecutor not updating when challenge changes from outside - web/flows: fix FlowExecutor not updating when challenge changes from outside
## Fixed in 2021.8.5 ## Fixed in 2021.8.5
- api: add additional filters for ldap and proxy providers - api: add additional filters for ldap and proxy providers
- api: cache schema, fix server urls - api: cache schema, fix server urls
- core: minor query optimization - core: minor query optimization
- events: add mark_all_seen - events: add mark_all_seen
- events: remove authentik_events gauge - events: remove authentik_events gauge
- internal: disable directory listing on static files - internal: disable directory listing on static files
- internal: fix font loading errors on safari - internal: fix font loading errors on safari
- internal: fix web requests not having a logger set - internal: fix web requests not having a logger set
- outpost: fix spans being sent without parent context - outpost: fix spans being sent without parent context
- outposts: add expected outpost replica count to metrics - outposts: add expected outpost replica count to metrics
- outposts/ldap: improve logging of client IPs - outposts/ldap: improve logging of client IPs
- policies/password: fix symbols not being checked correctly - policies/password: fix symbols not being checked correctly
- root: fix is_secure with safari on debug environments - root: fix is_secure with safari on debug environments
- root: include authentik version in backup naming - root: include authentik version in backup naming
- stages/identification: fix empty user_fields query returning first user - stages/identification: fix empty user_fields query returning first user
- web/admin: fix user selection in token form - web/admin: fix user selection in token form
- web/admin: show applications instead of providers in outpost form - web/admin: show applications instead of providers in outpost form
- web/flows: fix display error when using IdentificationStage without input fields - web/flows: fix display error when using IdentificationStage without input fields
## Upgrading ## Upgrading
@ -151,6 +151,6 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: 2021.8.5 tag: 2021.8.5
``` ```

View file

@ -5,7 +5,7 @@ slug: "2021.9"
## Headline Changes ## Headline Changes
- Split user interface - Split user interface
This release splits the administration interface from the end-user interface. This makes things clearer for end-users, as all their options are laid out more clearly. This release splits the administration interface from the end-user interface. This makes things clearer for end-users, as all their options are laid out more clearly.
@ -13,7 +13,7 @@ slug: "2021.9"
The admin interface remains the same, and familiar buttons will redirect you between interfaces. The admin interface remains the same, and familiar buttons will redirect you between interfaces.
- New proxy - New proxy
The proxy outpost has been rewritten from scratch. This replaces the old proxy, which was based on oauth2_proxy. The new proxy allows us a much greater degree of flexibility, is much lighter and reports errors better. The proxy outpost has been rewritten from scratch. This replaces the old proxy, which was based on oauth2_proxy. The new proxy allows us a much greater degree of flexibility, is much lighter and reports errors better.
@ -23,7 +23,7 @@ slug: "2021.9"
If you're using a manually deployed outpost, keep in mind that the ports change to 9000 and 9443 instead of 4180 and 4443 If you're using a manually deployed outpost, keep in mind that the ports change to 9000 and 9443 instead of 4180 and 4443
- New metrics - New metrics
This version introduces new and simplified Prometheus metrics. There is a new common monitoring port across the server and all outposts, 9300. This port requires no authentication, making it easier to configure. This version introduces new and simplified Prometheus metrics. There is a new common monitoring port across the server and all outposts, 9300. This port requires no authentication, making it easier to configure.
@ -31,166 +31,166 @@ slug: "2021.9"
## Minor changes ## Minor changes
- *: use common user agent for all outgoing requests - \*: use common user agent for all outgoing requests
- admin: migrate to new update check, add option to disable update check - admin: migrate to new update check, add option to disable update check
- api: add additional filters for ldap and proxy providers - api: add additional filters for ldap and proxy providers
- core: optimise groups api by removing member superuser status - core: optimise groups api by removing member superuser status
- core: remove ?v from static files - core: remove ?v from static files
- events: add mark_all_seen - events: add mark_all_seen
- events: allow setting a mapping for webhook transport to customise request payloads - events: allow setting a mapping for webhook transport to customise request payloads
- internal: fix font loading errors on safari - internal: fix font loading errors on safari
- lifecycle: fix worker startup error when docker socket's group is not called docker - lifecycle: fix worker startup error when docker socket's group is not called docker
- outpost: fix spans being sent without parent context - outpost: fix spans being sent without parent context
- outpost: update global outpost config on refresh - outpost: update global outpost config on refresh
- outposts: add expected outpost replica count to metrics - outposts: add expected outpost replica count to metrics
- outposts/controllers: re-create service when mismatched ports to prevent errors - outposts/controllers: re-create service when mismatched ports to prevent errors
- outposts/controllers/kubernetes: don't create service monitor for embedded outpost - outposts/controllers/kubernetes: don't create service monitor for embedded outpost
- outposts/ldap: improve logging of client IPs - outposts/ldap: improve logging of client IPs
- policies/password: fix symbols not being checked correctly - policies/password: fix symbols not being checked correctly
- root: include authentik version in backup naming - root: include authentik version in backup naming
- root: show location header in logs when redirecting - root: show location header in logs when redirecting
- sources/oauth: prevent potentially confidential data from being logged - sources/oauth: prevent potentially confidential data from being logged
- stages/authenticator_duo: add API to "import" devices from duo - stages/authenticator_duo: add API to "import" devices from duo
- stages/identification: fix empty user_fields query returning first user - stages/identification: fix empty user_fields query returning first user
- tenants: optimise db queries in middleware - tenants: optimise db queries in middleware
- web: allow duplicate messages - web: allow duplicate messages
- web: ignore network error - web: ignore network error
- web/admin: fix notification clear all not triggering render - web/admin: fix notification clear all not triggering render
- web/admin: fix user selection in token form - web/admin: fix user selection in token form
- web/admin: increase default expiry for refresh tokens - web/admin: increase default expiry for refresh tokens
- web/admin: show applications instead of providers in outpost form - web/admin: show applications instead of providers in outpost form
- web/flows: fix display error when using IdentificationStage without input fields - web/flows: fix display error when using IdentificationStage without input fields
## Fixed in 2021.9.1-rc2 ## Fixed in 2021.9.1-rc2
- core: fix token expiry for service accounts being only 30 minutes - core: fix token expiry for service accounts being only 30 minutes
- outposts: add consistent name and type to metrics - outposts: add consistent name and type to metrics
- outposts/proxy: remove deprecated rs256 - outposts/proxy: remove deprecated rs256
- policies: improve error handling when using bindings without policy - policies: improve error handling when using bindings without policy
- providers/saml: improved error handling - providers/saml: improved error handling
- stages/email: don't crash when testing stage does not exist - stages/email: don't crash when testing stage does not exist
- web: update background image - web: update background image
## Fixed in 2021.9.1-rc3 ## Fixed in 2021.9.1-rc3
- core: allow admins to create tokens with all parameters, re-add user to token form - core: allow admins to create tokens with all parameters, re-add user to token form
- core: fix tokens not being viewable but superusers - core: fix tokens not being viewable but superusers
- root: log failed celery tasks to event log - root: log failed celery tasks to event log
- sources/ldap: bump timeout, run each sync component in its own task - sources/ldap: bump timeout, run each sync component in its own task
- sources/ldap: improve messages of sync tasks in UI - sources/ldap: improve messages of sync tasks in UI
- sources/ldap: prevent error when retrying old system task with no arguments - sources/ldap: prevent error when retrying old system task with no arguments
- web: fix datetime-local fields throwing errors on firefox - web: fix datetime-local fields throwing errors on firefox
- web: fix text colour in delete form in dark mode - web: fix text colour in delete form in dark mode
- web: improve display of action buttons with non-primary classes - web: improve display of action buttons with non-primary classes
- web/admin: fix error in firefox when creating token - web/admin: fix error in firefox when creating token
- web/admin: fix ldap sync status for new API - web/admin: fix ldap sync status for new API
- web/admin: fix settings link on user avatar - web/admin: fix settings link on user avatar
- web/admin: trigger refresh after syncing ldap - web/admin: trigger refresh after syncing ldap
- web/user: add auto-focus search for applications - web/user: add auto-focus search for applications
- web/user: add missing stop impersonation button - web/user: add missing stop impersonation button
- web/user: fix edit button for applications - web/user: fix edit button for applications
- web/user: fix final redirect after stage setup - web/user: fix final redirect after stage setup
- web/user: optimise load, fix unread status for notifications - web/user: optimise load, fix unread status for notifications
## Fixed in 2021.9.1 ## Fixed in 2021.9.1
- api: disable include_format_suffixes - api: disable include_format_suffixes
- core: fix token identifier not being slugified when created with user-controller input - core: fix token identifier not being slugified when created with user-controller input
- outposts: don't map port 9300 on docker, only expose port - outposts: don't map port 9300 on docker, only expose port
- outposts: don't restart container when health checks are starting - outposts: don't restart container when health checks are starting
- outposts/ldap: allow custom attributes to shadow built-in attributes - outposts/ldap: allow custom attributes to shadow built-in attributes
- policies/expression: add ak_user_has_authenticator - policies/expression: add ak_user_has_authenticator
- root: use tagged go client version - root: use tagged go client version
- stages/email: don't throw 404 when token can't be found - stages/email: don't throw 404 when token can't be found
- stages/email: slugify token identifier - stages/email: slugify token identifier
- stages/email: use different query arguments for email and invitation tokens - stages/email: use different query arguments for email and invitation tokens
- web: fix notification badge not refreshing after clearing notifications - web: fix notification badge not refreshing after clearing notifications
## Fixed in 2021.9.2 ## Fixed in 2021.9.2
- api: add logging to sentry proxy - api: add logging to sentry proxy
- internal: add asset paths for user interface - internal: add asset paths for user interface
- web: fix import order of polyfills causing shadydom to not work on firefox and safari - web: fix import order of polyfills causing shadydom to not work on firefox and safari
- web/user: enable sentry - web/user: enable sentry
## Fixed in 2021.9.3 ## Fixed in 2021.9.3
- core: fix api return code for user self-update - core: fix api return code for user self-update
- events: add additional validation for event transport - events: add additional validation for event transport
- outposts: ensure service is always re-created with mismatching ports - outposts: ensure service is always re-created with mismatching ports
- outposts: fix outposts not correctly updating central state - outposts: fix outposts not correctly updating central state
- outposts: make AUTHENTIK_HOST_BROWSER configurable from central config - outposts: make AUTHENTIK_HOST_BROWSER configurable from central config
- outposts/proxy: ensure cookies only last as long as tokens - outposts/proxy: ensure cookies only last as long as tokens
- outposts/proxy: Fix failing traefik healthcheck (#1470) - outposts/proxy: Fix failing traefik healthcheck (#1470)
- outposts/proxyv2: fix routing not working correctly for domain auth - outposts/proxyv2: fix routing not working correctly for domain auth
- providers/proxy: add token_validity field for outpost configuration - providers/proxy: add token_validity field for outpost configuration
- web/admin: add notice for recovery - web/admin: add notice for recovery
- web/admin: fix NotificationWebhookMapping not loading correctly - web/admin: fix NotificationWebhookMapping not loading correctly
- web/admin: fix Transport Form not loading mode correctly on edit - web/admin: fix Transport Form not loading mode correctly on edit
- web/admin: handle error correctly when creating user recovery link - web/admin: handle error correctly when creating user recovery link
- web/elements: fix token copy error in safari - web/elements: fix token copy error in safari
- web/elements: improve error handling on forms - web/elements: improve error handling on forms
- web/user: fix brand not being shown in safari - web/user: fix brand not being shown in safari
- web/user: search apps when user typed before apps have loaded - web/user: search apps when user typed before apps have loaded
- website/docs: fix typos and grammar (#1459) - website/docs: fix typos and grammar (#1459)
## Fixed in 2021.9.4 ## Fixed in 2021.9.4
- outposts: allow disabling of docker controller port mapping - outposts: allow disabling of docker controller port mapping
- outposts/proxy: fix duplicate protocol in domain auth mode - outposts/proxy: fix duplicate protocol in domain auth mode
- root: Use fully qualified names for docker bases base images. (#1490) - root: Use fully qualified names for docker bases base images. (#1490)
- sources/ldap: add support for Active Directory `userAccountControl` attribute - sources/ldap: add support for Active Directory `userAccountControl` attribute
- sources/ldap: don't sync ldap source when no property mappings are set - sources/ldap: don't sync ldap source when no property mappings are set
- web/admin: don't require username nor name for activate/deactivate toggles - web/admin: don't require username nor name for activate/deactivate toggles
- web/admin: fix LDAP Source form not exposing syncParentGroup - web/admin: fix LDAP Source form not exposing syncParentGroup
- web/elements: fix initialLoad not being done when viewportCheck was disabled - web/elements: fix initialLoad not being done when viewportCheck was disabled
- web/elements: use dedicated button for search clear instead of webkit exclusive one - web/elements: use dedicated button for search clear instead of webkit exclusive one
## Fixed in 2021.9.5 ## Fixed in 2021.9.5
- events: add missing migration - events: add missing migration
- lifecycle: switch to h11 uvicorn worker for now - lifecycle: switch to h11 uvicorn worker for now
- outpost/proxy: fix missing negation for internal host ssl verification - outpost/proxy: fix missing negation for internal host ssl verification
- outposts: check ports of deployment in kubernetes outpost controller - outposts: check ports of deployment in kubernetes outpost controller
- outposts: don't always build permissions on outpost.user access, only in signals and tasks - outposts: don't always build permissions on outpost.user access, only in signals and tasks
- outposts: fix circular import in kubernetes controller - outposts: fix circular import in kubernetes controller
- outposts/proxy: add new headers with unified naming - outposts/proxy: add new headers with unified naming
- outposts/proxy: show full error message when user is authenticated - outposts/proxy: show full error message when user is authenticated
- providers/ldap: use RDN when using posixGroup's memberUid attribute (#1514) - providers/ldap: use RDN when using posixGroup's memberUid attribute (#1514)
- providers/proxy: always check ingress secret in kubernetes controller - providers/proxy: always check ingress secret in kubernetes controller
- sources/ldap: fix logic error in Active Directory account disabled status - sources/ldap: fix logic error in Active Directory account disabled status
- stages/email: add activate_user_on_success flag, add for all example flows - stages/email: add activate_user_on_success flag, add for all example flows
- stages/user_login: add check for user.is_active and tests - stages/user_login: add check for user.is_active and tests
- tests/integration: fix tests failing due to incorrect comparison - tests/integration: fix tests failing due to incorrect comparison
- web/admin: fix search group label - web/admin: fix search group label
## Fixed in 2021.9.6 ## Fixed in 2021.9.6
- admin: clear update notification when notification's version matches current version - admin: clear update notification when notification's version matches current version
- api: ensure viewsets have default ordering - api: ensure viewsets have default ordering
- core: include group uuids in self serializer - core: include group uuids in self serializer
- core: make user's name field fully options - core: make user's name field fully options
- core: only return group names for user_self - core: only return group names for user_self
- internal: add internal healthchecking to prevent websocket errors - internal: add internal healthchecking to prevent websocket errors
- outposts: fix error when comparing ports in docker controller when port mapping is disabled - outposts: fix error when comparing ports in docker controller when port mapping is disabled
- root: add docker-native healthcheck for web and celery - root: add docker-native healthcheck for web and celery
- root: remove redundant internal network from compose - root: remove redundant internal network from compose
- web: add locale detection - web: add locale detection
- web: fix rendering of token copy button in dark mode - web: fix rendering of token copy button in dark mode
- web: fix strings not being translated at all when matching browser locale not found - web: fix strings not being translated at all when matching browser locale not found
- web/admin: only show outpost deployment info when not embedded - web/admin: only show outpost deployment info when not embedded
- web/elements: fix model form always loading when viewport check is disabled - web/elements: fix model form always loading when viewport check is disabled
- web/flows: adjust message for email stage - web/flows: adjust message for email stage
- web/user: don't show managed tokens in user interface - web/user: don't show managed tokens in user interface
## Fixed in 2021.9.7 ## Fixed in 2021.9.7
- root: fix syntax error in dockerfile healthcheck - root: fix syntax error in dockerfile healthcheck
- web/admin: fix description for flow import - web/admin: fix description for flow import
## Fixed in 2021.9.8 ## Fixed in 2021.9.8
- web: fix interface crashing in non-blink browsers - web: fix interface crashing in non-blink browsers
## Upgrading ## Upgrading
@ -206,6 +206,6 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: 2021.9.1 tag: 2021.9.1
``` ```

View file

@ -7,126 +7,126 @@ slug: "2022.1"
This release mostly removes legacy fields and features that have been deprecated for several releases. This release mostly removes legacy fields and features that have been deprecated for several releases.
- LDAP Outposts: - LDAP Outposts:
This release removes the `accountStatus` and `superuser` fields. Use the direct replacements `goauthentik.io/ldap/active` and `goauthentik.io/ldap/superuser`. This release removes the `accountStatus` and `superuser` fields. Use the direct replacements `goauthentik.io/ldap/active` and `goauthentik.io/ldap/superuser`.
- Proxy Outposts: - Proxy Outposts:
This release consolidates headers sent by authentik to have a common prefix. This release consolidates headers sent by authentik to have a common prefix.
The following headers have been removed: The following headers have been removed:
- X-Auth-Username, use `X-authentik-username` - X-Auth-Username, use `X-authentik-username`
- X-Auth-Groups, use `X-authentik-groups` - X-Auth-Groups, use `X-authentik-groups`
- X-Forwarded-Email, use `X-authentik-email` - X-Forwarded-Email, use `X-authentik-email`
- X-Forwarded-Preferred-Username, use `X-authentik-username` - X-Forwarded-Preferred-Username, use `X-authentik-username`
- X-Forwarded-User, use `X-authentik-uid` - X-Forwarded-User, use `X-authentik-uid`
The proxy now also sets the host header based on what is configured as upstream in the proxy provider. The original Host is forwarded as `X-Forwarded-Host`. The proxy now also sets the host header based on what is configured as upstream in the proxy provider. The original Host is forwarded as `X-Forwarded-Host`.
Additionally, the header requirements for nginx have changed. Either a `X-Original-URL` or `X-Original-URI` header are now required. See the [*Proxy provider*](../providers/proxy/forward_auth) documentation for updated snippets. Additionally, the header requirements for nginx have changed. Either a `X-Original-URL` or `X-Original-URI` header are now required. See the [_Proxy provider_](../providers/proxy/forward_auth) documentation for updated snippets.
- API: - API:
The deprecated /api/v2beta/ Endpoint is removed. Use `/api/v3/`. The deprecated /api/v2beta/ Endpoint is removed. Use `/api/v3/`.
- Backup: - Backup:
The integrated backup has been deprecated for the following reasons: The integrated backup has been deprecated for the following reasons:
- Difficulty with restores not working properly - Difficulty with restores not working properly
- Inflexible configuration (fixed retention, limited to once a day, only S3 supported) - Inflexible configuration (fixed retention, limited to once a day, only S3 supported)
- Most users will already have an existing backup infrastructure - Most users will already have an existing backup infrastructure
## Minor changes/fixes ## Minor changes/fixes
- core: dont return 404 when trying to view key of expired token - core: dont return 404 when trying to view key of expired token
- crypto: fully parse certificate on validation in serializer to prevent invalid certificates from being saved - crypto: fully parse certificate on validation in serializer to prevent invalid certificates from being saved
- flows: handle error if flow title contains invalid format string - flows: handle error if flow title contains invalid format string
- internal: route traffic to proxy providers based on cookie domain when multiple domain-level providers exist - internal: route traffic to proxy providers based on cookie domain when multiple domain-level providers exist
- internal: use math.MaxInt for compatibility - internal: use math.MaxInt for compatibility
- lifecycle: add early check for missing/invalid secret key - lifecycle: add early check for missing/invalid secret key
- outposts/proxyv2: allow access to /outpost.goauthentik.io urls in forward auth mode to make routing in nginx/traefik easier - outposts/proxyv2: allow access to /outpost.goauthentik.io urls in forward auth mode to make routing in nginx/traefik easier
- outposts/proxyv2: fix before-redirect url not being saved in proxy mode - outposts/proxyv2: fix before-redirect url not being saved in proxy mode
- outposts/proxyv2: fix JWKS url pointing to localhost on embedded outpost - outposts/proxyv2: fix JWKS url pointing to localhost on embedded outpost
- providers/oauth2: change default redirect uri behaviour; set first used url when blank and use star for wildcard - providers/oauth2: change default redirect uri behaviour; set first used url when blank and use star for wildcard
- root: allow customisation of ports in compose without override - root: allow customisation of ports in compose without override
- root: decrease to 10 backup history - root: decrease to 10 backup history
- root: fix backups running every minute instead of once - root: fix backups running every minute instead of once
- stages/authenticator_webauthn: make more WebAuthn options configurable - stages/authenticator_webauthn: make more WebAuthn options configurable
- web: add polyfill for Intl.ListFormat - web: add polyfill for Intl.ListFormat
- web: directly read csrf token before injecting into request - web: directly read csrf token before injecting into request
- web: fix double plural in label - web: fix double plural in label
- web/admin: also set embedded outpost host when it doesn't include scheme - web/admin: also set embedded outpost host when it doesn't include scheme
- web/admin: fix missing configure flow setting on webuahtn setup stage form - web/admin: fix missing configure flow setting on webuahtn setup stage form
- web/flows: remove node directly instead of using removeChild() - web/flows: remove node directly instead of using removeChild()
## Fixed in 2022.1.2 ## Fixed in 2022.1.2
- internal/proxyv2: only allow access to /outpost.goauthentik.io in nginx mode when forward url could be extracted - internal/proxyv2: only allow access to /outpost.goauthentik.io in nginx mode when forward url could be extracted
- lib: disable backup by default, add note to configuration - lib: disable backup by default, add note to configuration
- lifecycle: replace lowercase, deprecated prometheus_multiproc_dir - lifecycle: replace lowercase, deprecated prometheus_multiproc_dir
- outposts: allow custom label for docker containers - outposts: allow custom label for docker containers
- policies/hibp: ensure password is encodable - policies/hibp: ensure password is encodable
- providers/proxy: add PathPrefix to auto-traefik labels - providers/proxy: add PathPrefix to auto-traefik labels
- root: upgrade python dependencies - root: upgrade python dependencies
## Fixed in 2022.1.3 ## Fixed in 2022.1.3
- internal: add support for X-Original-URL - internal: add support for X-Original-URL
- internal: add optional debug server listening on 9900 - internal: add optional debug server listening on 9900
- internal: don't override server header - internal: don't override server header
- internal: start adding tests to outpost - internal: start adding tests to outpost
- lifecycle: make secret_key warning more prominent - lifecycle: make secret_key warning more prominent
- lifecycle: wait for db in worker - lifecycle: wait for db in worker
- outposts/ldap: Fix more case sensitivity issues. (#2144) - outposts/ldap: Fix more case sensitivity issues. (#2144)
- outposts/proxy: add more test cases for domain-level auth - outposts/proxy: add more test cases for domain-level auth
- outposts/proxy: fix potential empty redirect, add tests - outposts/proxy: fix potential empty redirect, add tests
- outposts/proxy: trace full headers to debug - outposts/proxy: trace full headers to debug
- providers/proxy: fix traefik label - providers/proxy: fix traefik label
- root: add max-requests for gunicorn and max tasks for celery - root: add max-requests for gunicorn and max tasks for celery
- root: fix redis passwords not being encoded correctly - root: fix redis passwords not being encoded correctly
- web/admin: fix links which look like labels - web/admin: fix links which look like labels
- web/admin: fix SMS Stage form not working - web/admin: fix SMS Stage form not working
## Fixed in 2022.1.4 ## Fixed in 2022.1.4
- core: fix view_token permission not being assigned on token creation for non-admin user - core: fix view_token permission not being assigned on token creation for non-admin user
- lifecycle: remove gunicorn reload option - lifecycle: remove gunicorn reload option
- lifecycle: send analytics in gunicorn config to decrease outgoing requests when workers get restarted - lifecycle: send analytics in gunicorn config to decrease outgoing requests when workers get restarted
- providers/proxy: add support for X-Original-URI in nginx, better handle missing headers and report errors to authentik - providers/proxy: add support for X-Original-URI in nginx, better handle missing headers and report errors to authentik
- providers/proxy: don't include hostname and scheme in redirect when we only got a path and not a full URL - providers/proxy: don't include hostname and scheme in redirect when we only got a path and not a full URL
- providers/proxy: fix routing for external_host when using forward_auth_domain - providers/proxy: fix routing for external_host when using forward_auth_domain
- providers/proxy: set traefik labels using object_naming_template instead of UUID - providers/proxy: set traefik labels using object_naming_template instead of UUID
- sources/ldap: add list_flatten function to property mappings, enable on managed LDAP mappings - sources/ldap: add list_flatten function to property mappings, enable on managed LDAP mappings
- web: add es locale - web: add es locale
- web: add pl locale - web: add pl locale
- web/admin: only check first half of locale when detecting - web/admin: only check first half of locale when detecting
- web/flows: fix width on flow container - web/flows: fix width on flow container
- web/user: include locale code in locale selection - web/user: include locale code in locale selection
## Fixed in 2022.1.5 ## Fixed in 2022.1.5
- build(deps): bump uvicorn from 0.17.1 to 0.17.3 (#2229) - build(deps): bump uvicorn from 0.17.1 to 0.17.3 (#2229)
- core: allow formatting strings to be used for applications' launch URLs - core: allow formatting strings to be used for applications' launch URLs
- internal: don't attempt to lookup SNI Certificate if no SNI is sent - internal: don't attempt to lookup SNI Certificate if no SNI is sent
- internal: fix CSRF error caused by Host header - internal: fix CSRF error caused by Host header
- internal: improve error handling for internal reverse proxy - internal: improve error handling for internal reverse proxy
- internal: remove uvicorn server header - internal: remove uvicorn server header
- internal: trace headers and url for backend requests - internal: trace headers and url for backend requests
- outposts: fix channel not always having a logger attribute - outposts: fix channel not always having a logger attribute
- outposts: fix compare_ports to support both service and container ports - outposts: fix compare_ports to support both service and container ports
- outposts: fix service reconciler re-creating services - outposts: fix service reconciler re-creating services
- outposts: remove node_port on V1ServicePort checks to prevent service creation loops - outposts: remove node_port on V1ServicePort checks to prevent service creation loops
- providers/proxy: fix Host/:Authority not being modified - providers/proxy: fix Host/:Authority not being modified
- providers/proxy: fix nil error in claims - providers/proxy: fix nil error in claims
- providers/proxy: improve error handling for invalid backend_override - providers/proxy: improve error handling for invalid backend_override
- sources/ldap: log entire exception - sources/ldap: log entire exception
- sources/saml: fix incorrect ProtocolBinding being sent - sources/saml: fix incorrect ProtocolBinding being sent
- sources/saml: fix server error - sources/saml: fix server error
- stages/authenticator_validate: handle non-existent device_challenges - stages/authenticator_validate: handle non-existent device_challenges
- web/admin: fix mismatched icons in overview and lists - web/admin: fix mismatched icons in overview and lists
## Upgrading ## Upgrading
@ -142,6 +142,6 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: 2022.1.1 tag: 2022.1.1
``` ```

View file

@ -9,14 +9,14 @@ slug: "2022.2"
The integrated backup functionality has been removed due to the following reasons: The integrated backup functionality has been removed due to the following reasons:
- It caused a lot of issues during restore, with things breaking and difficult to restore backups - It caused a lot of issues during restore, with things breaking and difficult to restore backups
- Limited compatibility (only supported local and S3 backups) - Limited compatibility (only supported local and S3 backups)
- Most environments already have a solution for backups, so we feel that investing more time into making this feature better should be spent on more important things. - Most environments already have a solution for backups, so we feel that investing more time into making this feature better should be spent on more important things.
If you don't already have a standard backup solution for other applications, you can consider these replacements: If you don't already have a standard backup solution for other applications, you can consider these replacements:
- https://github.com/kartoza/docker-pg-backup for docker-compose and - https://github.com/kartoza/docker-pg-backup for docker-compose and
- https://devtron.ai/blog/creating-a-kubernetes-cron-job-to-backup-postgres-db/ or https://cwienczek.com/2020/06/simple-backup-of-postgres-database-in-kubernetes/ for Kubernetes - https://devtron.ai/blog/creating-a-kubernetes-cron-job-to-backup-postgres-db/ or https://cwienczek.com/2020/06/simple-backup-of-postgres-database-in-kubernetes/ for Kubernetes
### Changed URLs for forward auth ### Changed URLs for forward auth
@ -30,38 +30,38 @@ In an authenticator validation stage you can now configure multiple configuratio
## Minor changes/fixes ## Minor changes/fixes
- *: add placeholder custom.css to easily allow user customisation - \*: add placeholder custom.css to easily allow user customisation
- *: rename akprox to outpost.goauthentik.io (#2266) - \*: rename akprox to outpost.goauthentik.io (#2266)
- internal: don't attempt to lookup SNI Certificate if no SNI is sent - internal: don't attempt to lookup SNI Certificate if no SNI is sent
- internal: improve error handling for internal reverse proxy - internal: improve error handling for internal reverse proxy
- internal: increase logging for no hostname found - internal: increase logging for no hostname found
- internal: remove uvicorn server header - internal: remove uvicorn server header
- outposts: ensure keypair is set for SSH connections - outposts: ensure keypair is set for SSH connections
- outposts: fix channel not always having a logger attribute - outposts: fix channel not always having a logger attribute
- outposts: fix compare_ports to support both service and container ports - outposts: fix compare_ports to support both service and container ports
- outposts: fix service reconciler re-creating services - outposts: fix service reconciler re-creating services
- outposts: make local discovery configurable - outposts: make local discovery configurable
- outposts: remove node_port on V1ServicePort checks to prevent service creation loops - outposts: remove node_port on V1ServicePort checks to prevent service creation loops
- outposts/proxy: correctly check host in forward domain redirect - outposts/proxy: correctly check host in forward domain redirect
- outposts/proxy: correctly handle ?rd= param - outposts/proxy: correctly handle ?rd= param
- providers/oauth2: add support for explicit response_mode - providers/oauth2: add support for explicit response_mode
- providers/oauth2: fix redirect_uri being lowercased on successful validation - providers/oauth2: fix redirect_uri being lowercased on successful validation
- providers/proxy: enable TLS in ingress via traefik annotation - providers/proxy: enable TLS in ingress via traefik annotation
- providers/proxy: improve error handling for invalid backend_override - providers/proxy: improve error handling for invalid backend_override
- providers/proxy: remove leading slash to allow subdirectories in proxy - providers/proxy: remove leading slash to allow subdirectories in proxy
- sources/ldap: log entire exception - sources/ldap: log entire exception
- sources/ldap: use merger that only appends unique items to list - sources/ldap: use merger that only appends unique items to list
- sources/saml: fix incorrect ProtocolBinding being sent - sources/saml: fix incorrect ProtocolBinding being sent
- stages/authenticator_validate: add ability to select multiple configuration stages which the user can choose - stages/authenticator_validate: add ability to select multiple configuration stages which the user can choose
- stages/authenticator_validate: fix handling when single configuration stage is selected - stages/authenticator_validate: fix handling when single configuration stage is selected
- stages/authenticator_validate: handle non-existent device_challenges - stages/authenticator_validate: handle non-existent device_challenges
- Translate /web/src/locales/en.po in de (#2291) - Translate /web/src/locales/en.po in de (#2291)
- Translate /web/src/locales/en.po in pl (#2274) - Translate /web/src/locales/en.po in pl (#2274)
- Translate /web/src/locales/en.po in zh_TW (#2263) - Translate /web/src/locales/en.po in zh_TW (#2263)
- Translate /web/src/locales/en.po in zh-Hans (#2262) - Translate /web/src/locales/en.po in zh-Hans (#2262)
- Translate /web/src/locales/en.po in zh-Hant (#2261) - Translate /web/src/locales/en.po in zh-Hant (#2261)
- web/admin: fix invalid URLs in example proxy config - web/admin: fix invalid URLs in example proxy config
- web/admin: fix mismatched icons in overview and lists - web/admin: fix mismatched icons in overview and lists
## Upgrading ## Upgrading
@ -79,8 +79,8 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: 2022.2.1 tag: 2022.2.1
``` ```
Backup-related settings can be removed but will not cause any errors either. Backup-related settings can be removed but will not cause any errors either.

View file

@ -21,43 +21,43 @@ To simplify the release process we don't publish explicitly tagged release-candi
## Minor changes/fixes ## Minor changes/fixes
- core: add initial app launch url (#2367) - core: add initial app launch url (#2367)
- core: customisable user settings (#2397) - core: customisable user settings (#2397)
- core/api: allow filtering users by uid, add uid to search - core/api: allow filtering users by uid, add uid to search
- internal/ldap: fix panic when parsing lists with mixed types - internal/ldap: fix panic when parsing lists with mixed types
- lib: fix default geoip path - lib: fix default geoip path
- providers/oauth2: fix invalid launch URL being generated - providers/oauth2: fix invalid launch URL being generated
- providers/oauth2: initial client_credentials grant support (#2437) - providers/oauth2: initial client_credentials grant support (#2437)
- providers/proxy: always set rd param in addition to session to prevent wrong url in session - providers/proxy: always set rd param in addition to session to prevent wrong url in session
- web: cleanup default footer links - web: cleanup default footer links
- web: prioritise ?locale parameter over saved locale - web: prioritise ?locale parameter over saved locale
- web/admin: improve user and group management by showing related objects - web/admin: improve user and group management by showing related objects
- web/admin: use searchable select field for users and groups in policy binding form - web/admin: use searchable select field for users and groups in policy binding form
- web/flows: fix rendering of help text on prompt stages - web/flows: fix rendering of help text on prompt stages
## Fixed in 2022.3.2 ## Fixed in 2022.3.2
- core: replace uid with uuid search - core: replace uid with uuid search
- flows: revert default flow user change - flows: revert default flow user change
- lib: lower default sample rate - lib: lower default sample rate
- sources/ldap: fix parent_group not being applied - sources/ldap: fix parent_group not being applied
- stages/authenticator_validate: fix passwordless flows not working - stages/authenticator_validate: fix passwordless flows not working
- web/elements: fix error with blank SearchSelect elements in forms - web/elements: fix error with blank SearchSelect elements in forms
- web/elements: fix search select background in dark mode - web/elements: fix search select background in dark mode
- web/elements: fix search-select hover background - web/elements: fix search-select hover background
- web/user: filter applications by launch URL lto show empty state - web/user: filter applications by launch URL lto show empty state
- web/user: fix duplicate help text in prompts - web/user: fix duplicate help text in prompts
## Fixed in 2022.3.3 ## Fixed in 2022.3.3
- core: fix provider launch URL being prioritised over manually configured launch URL - core: fix provider launch URL being prioritised over manually configured launch URL
- crypto: open files in read-only mode for importing (#2536) - crypto: open files in read-only mode for importing (#2536)
- outposts/ldap: prevent operations error from nil dereference (#2447) - outposts/ldap: prevent operations error from nil dereference (#2447)
- outposts/proxy: use Prefix in ingress for k8s - outposts/proxy: use Prefix in ingress for k8s
- web: fix style for selected item in select in dark mode - web: fix style for selected item in select in dark mode
- web/admin: default to not include current session in flow play, add option to start with current session - web/admin: default to not include current session in flow play, add option to start with current session
- web/admin: fix user defaulting to 0 when not set in PolicyBindingForm - web/admin: fix user defaulting to 0 when not set in PolicyBindingForm
- web/elements: make SearchSelect optionally blankable - web/elements: make SearchSelect optionally blankable
## Upgrading ## Upgrading
@ -73,6 +73,6 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: 2022.3.1 tag: 2022.3.1
``` ```

View file

@ -5,46 +5,46 @@ slug: "2022.4"
## Breaking changes ## Breaking changes
- Removal of HTTP Basic authentication for API requests - Removal of HTTP Basic authentication for API requests
For legacy reasons, authentik used to support HTTP-Basic authenticated requests, using the token as a password. This has been removed. For legacy reasons, authentik used to support HTTP-Basic authenticated requests, using the token as a password. This has been removed.
- Removal of deprecated context in Expression policies used in prompt stages - Removal of deprecated context in Expression policies used in prompt stages
Before this version, you could use both `context['*field_name*']` and `context['prompt_data']['*field_name*']`. The former one has been removed as it could overwrite other data in the context if the field name is the same as another context value. Before this version, you could use both `context['*field_name*']` and `context['prompt_data']['*field_name*']`. The former one has been removed as it could overwrite other data in the context if the field name is the same as another context value.
## New features ## New features
- Application Grouping - Application Grouping
Applications can now be grouped together to better organise connected applications in the user dashboard. Applications can now be grouped together to better organise connected applications in the user dashboard.
- JWT authentication for `client_credentials` grants - JWT authentication for `client_credentials` grants
Providers can now be configured to accept JWTs signed by configured certificates, which makes it a lot easier to services access to authentik, when an existing machine/service identity is provided (for example, this can be used to let Kubernetes Pods authenticate themselves to authentik via their service account) Providers can now be configured to accept JWTs signed by configured certificates, which makes it a lot easier to services access to authentik, when an existing machine/service identity is provided (for example, this can be used to let Kubernetes Pods authenticate themselves to authentik via their service account)
## Minor changes/fixes ## Minor changes/fixes
- core: add method to set key of token - core: add method to set key of token
- core: add num_pk to group for applications that need a numerical group id - core: add num_pk to group for applications that need a numerical group id
- internal: disable HTML encoding in go-generated log messages - internal: disable HTML encoding in go-generated log messages
- lifecycle: fix password and hostname in redis URI not properly quoted - lifecycle: fix password and hostname in redis URI not properly quoted
- outposts: check if docker ports should be mapped before comparing ports - outposts: check if docker ports should be mapped before comparing ports
- policies: add policy log messages to test endpoints - policies: add policy log messages to test endpoints
- providers/oauth2: map internal groups to GitHub teams in GHE OAuth emulation (#2497) - providers/oauth2: map internal groups to GitHub teams in GHE OAuth emulation (#2497)
- providers/oauth2: pass scope and other parameters to access policy request context - providers/oauth2: pass scope and other parameters to access policy request context
- stages/email: allow overriding of destination email in plan context - stages/email: allow overriding of destination email in plan context
- stages/invitation: add invitation name - stages/invitation: add invitation name
- stages/prompt: filter rest_framework.fields.empty when field is not required - stages/prompt: filter rest_framework.fields.empty when field is not required
- stages/prompt: fix non-required fields not allowing blank values - stages/prompt: fix non-required fields not allowing blank values
- stages/prompt: set field default based on placeholder - stages/prompt: set field default based on placeholder
- tenants: add tenant-level attributes, applied to users based on request - tenants: add tenant-level attributes, applied to users based on request
- web: live-convert to slug in fields where only slugs are allowed - web: live-convert to slug in fields where only slugs are allowed
- web: migrate dropdowns to wizards (#2633) - web: migrate dropdowns to wizards (#2633)
- web/admin: allow editing of invitations - web/admin: allow editing of invitations
- web/admin: fix missing protocols on generated nginx config - web/admin: fix missing protocols on generated nginx config
- web/admin: trigger update when provider wizard finishes - web/admin: trigger update when provider wizard finishes
- web/user: add column layouts - web/user: add column layouts
## Upgrading ## Upgrading
@ -60,6 +60,6 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: 2022.4.1 tag: 2022.4.1
``` ```

View file

@ -7,28 +7,28 @@ slug: "2022.5"
## New features ## New features
- LDAP Outpost cached binding - LDAP Outpost cached binding
Instead of always executing the configured flow when a new Bind request is received, the provider can now be configured to cache the session from the initial flow execution, and directly validate credentials in the outpost. This drastically improves the bind performance. Instead of always executing the configured flow when a new Bind request is received, the provider can now be configured to cache the session from the initial flow execution, and directly validate credentials in the outpost. This drastically improves the bind performance.
See [LDAP provider](../providers/ldap.md#cached-bind) See [LDAP provider](../providers/ldap.md#cached-bind)
## Minor changes/fixes ## Minor changes/fixes
- *: decrease frequency of background tasks, smear tasks based on name and fqdn - \*: decrease frequency of background tasks, smear tasks based on name and fqdn
- core: add custom shell command which imports all models and creates events for model events - core: add custom shell command which imports all models and creates events for model events
- core: add flag to globally disable impersonation - core: add flag to globally disable impersonation
- events: fix created events only being logged as debug level - events: fix created events only being logged as debug level
- flows: handle flow title formatting error better, add user to flow title context - flows: handle flow title formatting error better, add user to flow title context
- outposts/ldap: cached bind (#2824) - outposts/ldap: cached bind (#2824)
- policies: fix current user not being set in server-side policy deny - policies: fix current user not being set in server-side policy deny
- root: export poetry deps to requirements.txt so we don't need poetry … (#2823) - root: export poetry deps to requirements.txt so we don't need poetry … (#2823)
- root: handle JSON error in metrics too - root: handle JSON error in metrics too
- root: set SESSION_SAVE_EVERY_REQUEST to enable sliding sessions - root: set SESSION_SAVE_EVERY_REQUEST to enable sliding sessions
- root: use npm ci - root: use npm ci
- sources/oauth: Fix wording for OAuth source names (#2732) - sources/oauth: Fix wording for OAuth source names (#2732)
- stages/user_delete: fix delete stage failing when pending user is not explicitly set - stages/user_delete: fix delete stage failing when pending user is not explicitly set
- web/user: add missing checkbox element in user settings (#2762) - web/user: add missing checkbox element in user settings (#2762)
## Upgrading ## Upgrading
@ -44,6 +44,6 @@ Update your values to use the new images:
```yaml ```yaml
image: image:
repository: ghcr.io/goauthentik/server repository: ghcr.io/goauthentik/server
tag: 2022.5.1 tag: 2022.5.1
``` ```

View file

@ -4,7 +4,7 @@ title: Missing admin group
If all of the Admin groups have been deleted, or misconfigured during sync, you can use the following command to gain access back. If all of the Admin groups have been deleted, or misconfigured during sync, you can use the following command to gain access back.
Run the following command, where *username* is the user you want to add to the newly created group: Run the following command, where _username_ is the user you want to add to the newly created group:
``` ```
docker-compose run --rm server create_admin_group username docker-compose run --rm server create_admin_group username

View file

@ -10,4 +10,4 @@ When you bind a group to an application or flow, any members of any child group
## Attributes ## Attributes
Attributes of groups are recursively merged, for all groups the user is a *direct* member of. Attributes of groups are recursively merged, for all groups the user is a _direct_ member of.

View file

@ -36,24 +36,27 @@ These headers will now be passed to the application when the user logs in. Most
The User object has the following attributes: The User object has the following attributes:
- `username`: User's username. - `username`: User's username.
- `email` User's email. - `email` User's email.
- `name` User's display name. - `name` User's display name.
- `is_staff` Boolean field if user is staff. - `is_staff` Boolean field if user is staff.
- `is_active` Boolean field if user is active. - `is_active` Boolean field if user is active.
- `date_joined` Date user joined/was created. - `date_joined` Date user joined/was created.
- `password_change_date` Date password was last changed. - `password_change_date` Date password was last changed.
- `attributes` Dynamic attributes, see above - `attributes` Dynamic attributes, see above
- `group_attributes()` Merged attributes of all groups the user is member of and the user's own attributes. - `group_attributes()` Merged attributes of all groups the user is member of and the user's own attributes.
- `ak_groups` This is a queryset of all the user's groups. - `ak_groups` This is a queryset of all the user's groups.
You can do additional filtering like You can do additional filtering like
```python ```python
user.ak_groups.filter(name__startswith='test') user.ak_groups.filter(name__startswith='test')
``` ```
see [here](https://docs.djangoproject.com/en/3.1/ref/models/querysets/#id4) see [here](https://docs.djangoproject.com/en/3.1/ref/models/querysets/#id4)
To get the name of all groups, you can do To get the name of all groups, you can do
```python ```python
[group.name for group in user.ak_groups.all()] [group.name for group in user.ak_groups.all()]
``` ```

View file

@ -14,25 +14,25 @@ Apache Guacamole is a clientless remote desktop gateway. It supports standard pr
The following placeholders will be used: The following placeholders will be used:
- `guacamole.company` is the FQDN of the Guacamole install. - `guacamole.company` is the FQDN of the Guacamole install.
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
Create an OAuth2/OpenID provider with the following parameters: Create an OAuth2/OpenID provider with the following parameters:
- Client Type: `Confidential` - Client Type: `Confidential`
- Redirect URIs: `https://guacamole.company/` (depending on your Tomcat setup, you might have to add `/guacamole/` if the application runs in a subfolder) - Redirect URIs: `https://guacamole.company/` (depending on your Tomcat setup, you might have to add `/guacamole/` if the application runs in a subfolder)
- Scopes: OpenID, Email and Profile - Scopes: OpenID, Email and Profile
Under *Advanced protocol settings*, set the following: Under _Advanced protocol settings_, set the following:
- Token validity: Any value to configure how long the session should last. Guacamole will not accept any tokens valid longer than 300 Minutes. - Token validity: Any value to configure how long the session should last. Guacamole will not accept any tokens valid longer than 300 Minutes.
Note the Client ID value. Create an application, using the provider you've created above. Note the Client ID value. Create an application, using the provider you've created above.
## Guacamole ## Guacamole
import Tabs from '@theme/Tabs'; import Tabs from "@theme/Tabs";
import TabItem from '@theme/TabItem'; import TabItem from "@theme/TabItem";
<Tabs <Tabs
defaultValue="docker" defaultValue="docker"
@ -50,6 +50,7 @@ OPENID_ISSUER: https://authentik.company/application/o/*Slug of the application
OPENID_JWKS_ENDPOINT: https://authentik.company/application/o/*Slug of the application from above*/jwks/ OPENID_JWKS_ENDPOINT: https://authentik.company/application/o/*Slug of the application from above*/jwks/
OPENID_REDIRECT_URI: https://guacamole.company/ # This must match the redirect URI above OPENID_REDIRECT_URI: https://guacamole.company/ # This must match the redirect URI above
``` ```
</TabItem> </TabItem>
<TabItem value="standalone"> <TabItem value="standalone">
Standalone Guacamole is configured using the `guacamole.properties` file. Add the following settings: Standalone Guacamole is configured using the `guacamole.properties` file. Add the following settings:
@ -61,5 +62,6 @@ openid-issuer=https://authentik.company/application/o/*Slug of the application f
openid-jwks-endpoint=https://authentik.company/application/o/*Slug of the application from above*/jwks/ openid-jwks-endpoint=https://authentik.company/application/o/*Slug of the application from above*/jwks/
openid-redirect-uri=https://guacamole.company/ # This must match the redirect URI above openid-redirect-uri=https://guacamole.company/ # This must match the redirect URI above
``` ```
</TabItem> </TabItem>
</Tabs> </Tabs>

View file

@ -12,14 +12,14 @@ Amazon Web Services (AWS) is the worlds most comprehensive and broadly adopte
The following placeholders will be used: The following placeholders will be used:
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
Create an application in authentik and note the slug, as this will be used later. Create a SAML provider with the following parameters: Create an application in authentik and note the slug, as this will be used later. Create a SAML provider with the following parameters:
- ACS URL: `https://signin.aws.amazon.com/saml` - ACS URL: `https://signin.aws.amazon.com/saml`
- Audience: `urn:amazon:webservices` - Audience: `urn:amazon:webservices`
- Issuer: `authentik` - Issuer: `authentik`
- Binding: `Post` - Binding: `Post`
You can of course use a custom signing certificate, and adjust durations. You can of course use a custom signing certificate, and adjust durations.

View file

@ -20,15 +20,15 @@ AWX is the open-source version of Tower. The term "AWX" will be used interchange
The following placeholders will be used: The following placeholders will be used:
- `awx.company` is the FQDN of the AWX/Tower install. - `awx.company` is the FQDN of the AWX/Tower install.
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
Create an application in authentik and note the slug, as this will be used later. Create a SAML provider with the following parameters: Create an application in authentik and note the slug, as this will be used later. Create a SAML provider with the following parameters:
- ACS URL: `https://awx.company/sso/complete/saml/` - ACS URL: `https://awx.company/sso/complete/saml/`
- Audience: `awx` - Audience: `awx`
- Service Provider Binding: Post - Service Provider Binding: Post
- Issuer: `https://awx.company/sso/metadata/saml/` - Issuer: `https://awx.company/sso/metadata/saml/`
You can of course use a custom signing certificate, and adjust durations. You can of course use a custom signing certificate, and adjust durations.

View file

@ -18,24 +18,26 @@ This is based on authentik 2021.7.2 and BookStack V21.05.3. Instructions may dif
The following placeholders will be used: The following placeholders will be used:
- `book.company` is the FQDN of BookStack. - `book.company` is the FQDN of BookStack.
- `authentik.company` is the FQDN of authentik. - `authentik.company` is the FQDN of authentik.
- `METADATAURL` is the url for the SAML metadata from authentik - `METADATAURL` is the url for the SAML metadata from authentik
### Step 1 ### Step 1
In authentik, under _Providers_, create a _SAML Provider_ with these settings: In authentik, under _Providers_, create a _SAML Provider_ with these settings:
**Protocol Settings** **Protocol Settings**
- Name: Bookstack
- ACS URL: https://book.company/saml2/acs - Name: Bookstack
- Issuer: https://authentik.company - ACS URL: https://book.company/saml2/acs
- Service Provider Binding: Post - Issuer: https://authentik.company
- Audience: https://book.company/saml2/metadata - Service Provider Binding: Post
- Audience: https://book.company/saml2/metadata
**Advanced protocol settings** **Advanced protocol settings**
- Signing Certificate: Choose your certificate or the default authentik Self-signed Certificate
All other options as default. - Signing Certificate: Choose your certificate or the default authentik Self-signed Certificate
All other options as default.
![](./authentik_saml_bookstack.png) ![](./authentik_saml_bookstack.png)
@ -43,10 +45,10 @@ All other options as default.
In authentik, create an application which uses this provider. Optionally apply access restrictions to the application using policy bindings. In authentik, create an application which uses this provider. Optionally apply access restrictions to the application using policy bindings.
- Name: Bookstack - Name: Bookstack
- Slug: bookstack - Slug: bookstack
- Provider: Bookstack - Provider: Bookstack
- Launch URL: https://book.company - Launch URL: https://book.company
### Step 3 ### Step 3
@ -99,7 +101,7 @@ BookStack will attempt to match the SAML user to an existing BookStack user base
::: :::
:::note :::note
SAML Group Sync is supported by Bookstack. Review the BookStack documentation on the required Environment variables. https://www.bookstackapp.com/docs/admin/saml2-auth/ SAML Group Sync is supported by Bookstack. Review the BookStack documentation on the required Environment variables. https://www.bookstackapp.com/docs/admin/saml2-auth/
::: :::
:::note :::note

View file

@ -14,15 +14,15 @@ Budibase is an open source low-code platform, and the easiest way to build inter
The following placeholders will be used: The following placeholders will be used:
- `budibase.company` is the FQDN of the Budibase install. - `budibase.company` is the FQDN of the Budibase install.
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
Create an application in authentik. Create an OAuth2/OpenID provider with the following parameters: Create an application in authentik. Create an OAuth2/OpenID provider with the following parameters:
- Client Type: `Confidential` - Client Type: `Confidential`
- Scopes: OpenID, Email and Profile - Scopes: OpenID, Email and Profile
- Signing Key: Select any available key - Signing Key: Select any available key
- Redirect URIs: `https://budibase.company/api/global/auth/oidc/callback` - Redirect URIs: `https://budibase.company/api/global/auth/oidc/callback`
Note the Client ID and Client Secret values. Create an application, using the provider you've created above. Note the Client ID and Client Secret values. Create an application, using the provider you've created above.
@ -30,6 +30,6 @@ Note the Client ID and Client Secret values. Create an application, using the pr
In Budibase under `Auth` set the following values In Budibase under `Auth` set the following values
- Config URL: `https://authentik.company/application/o/<Slug of the application from above>/.well-known/openid-configuration` - Config URL: `https://authentik.company/application/o/<Slug of the application from above>/.well-known/openid-configuration`
- Client ID: `Client ID from above` - Client ID: `Client ID from above`
- Client Secret: `Client Secret from above` - Client Secret: `Client Secret from above`

View file

@ -16,20 +16,22 @@ FortiManager is a paid enterprise product.
The following placeholders will be used: The following placeholders will be used:
- `fgm.company` is the FQDN of the FortiManager install. - `fgm.company` is the FQDN of the FortiManager install.
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
Create an application and Provider in authentik, note the slug, as this will be used later. Create a SAML provider with the following parameters: Create an application and Provider in authentik, note the slug, as this will be used later. Create a SAML provider with the following parameters:
Provider: Provider:
- ACS URL: `https://fgm.company/saml/?acs`
- Issuer: `https://authentik.company/application/saml/fgm/sso/binding/redirect/` - ACS URL: `https://fgm.company/saml/?acs`
- Service Provider Binding: Post - Issuer: `https://authentik.company/application/saml/fgm/sso/binding/redirect/`
- Service Provider Binding: Post
You can of course use a custom signing certificate, and adjust durations. You can of course use a custom signing certificate, and adjust durations.
Application: Application:
- Launch URL: 'https://fgm.company/p/sso_sp/'
- Launch URL: 'https://fgm.company/p/sso_sp/'
## FortiManager Configuration ## FortiManager Configuration

View file

@ -18,8 +18,8 @@ This is based on authentik 2021.10.3 and Gitea 1.16.0+rc1 installed using https:
The following placeholders will be used: The following placeholders will be used:
- `authentik.company` is the FQDN of authentik. - `authentik.company` is the FQDN of authentik.
- `gitea.company` is the FQDN of Gitea. - `gitea.company` is the FQDN of Gitea.
### Step 1 ### Step 1
@ -31,8 +31,8 @@ Only settings that have been modified from default have been listed.
**Protocol Settings** **Protocol Settings**
- Name: Gitea - Name: Gitea
- Signing Key: Select any available key - Signing Key: Select any available key
:::note :::note
Take note of the `Client ID` and `Client Secret`, you'll need to give them to Gitea in _Step 3_. Take note of the `Client ID` and `Client Secret`, you'll need to give them to Gitea in _Step 3_.
@ -46,9 +46,9 @@ In authentik, create an application (under _Resources/Applications_) which uses
Only settings that have been modified from default have been listed. Only settings that have been modified from default have been listed.
::: :::
- Name: Gitea - Name: Gitea
- Slug: gitea-slug - Slug: gitea-slug
- Provider: Gitea - Provider: Gitea
### Step 3 ### Step 3
@ -56,13 +56,13 @@ Navigate to the _Authentication Sources_ page at https://gitea.company/admin/aut
Change the following fields Change the following fields
- Authentication Name: authentik - Authentication Name: authentik
- OAuth2 Provider: OpenID Connect - OAuth2 Provider: OpenID Connect
- Client ID (Key): Step 2 - Client ID (Key): Step 2
- Client Secret: Step 2 - Client Secret: Step 2
- Icon URL: https://raw.githubusercontent.com/goauthentik/authentik/master/web/icons/icon.png - Icon URL: https://raw.githubusercontent.com/goauthentik/authentik/master/web/icons/icon.png
- OpenID Connect Auto Discovery URL: https://authentik.company/application/o/gitea-slug/.well-known/openid-configuration - OpenID Connect Auto Discovery URL: https://authentik.company/application/o/gitea-slug/.well-known/openid-configuration
- Additional Scopes: `email profile` - Additional Scopes: `email profile`
![](./gitea1.png) ![](./gitea1.png)

View file

@ -14,22 +14,22 @@ GitLab is a complete DevOps platform, delivered as a single application. This ma
The following placeholders will be used: The following placeholders will be used:
- `gitlab.company` is the FQDN of the GitLab Install - `gitlab.company` is the FQDN of the GitLab Install
- `authentik.company` is the FQDN of the authentik Install - `authentik.company` is the FQDN of the authentik Install
Create an application in authentik and note the slug, as this will be used later. Create a SAML provider with the following parameters: Create an application in authentik and note the slug, as this will be used later. Create a SAML provider with the following parameters:
- ACS URL: `https://gitlab.company/users/auth/saml/callback` - ACS URL: `https://gitlab.company/users/auth/saml/callback`
- Audience: `https://gitlab.company` - Audience: `https://gitlab.company`
- Issuer: `https://gitlab.company` - Issuer: `https://gitlab.company`
- Binding: `Redirect` - Binding: `Redirect`
Under *Advanced protocol settings*, set a certificate for *Signing Certificate*. Under _Advanced protocol settings_, set a certificate for _Signing Certificate_.
## GitLab Configuration ## GitLab Configuration
Paste the following block in your `gitlab.rb` file, after replacing the placeholder values from above. The file is located in `/etc/gitlab`. Paste the following block in your `gitlab.rb` file, after replacing the placeholder values from above. The file is located in `/etc/gitlab`.
To get the value for `idp_cert_fingerprint`, go to the Certificate list under *Identity & Cryptography*, and expand the selected certificate. To get the value for `idp_cert_fingerprint`, go to the Certificate list under _Identity & Cryptography_, and expand the selected certificate.
```ruby ```ruby
gitlab_rails['omniauth_enabled'] = true gitlab_rails['omniauth_enabled'] = true

View file

@ -14,22 +14,22 @@ Grafana is a multi-platform open source analytics and interactive visualization
The following placeholders will be used: The following placeholders will be used:
- `grafana.company` is the FQDN of the Grafana install. - `grafana.company` is the FQDN of the Grafana install.
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
Create an application in authentik. Create an OAuth2/OpenID provider with the following parameters: Create an application in authentik. Create an OAuth2/OpenID provider with the following parameters:
- Client Type: `Confidential` - Client Type: `Confidential`
- Scopes: OpenID, Email and Profile - Scopes: OpenID, Email and Profile
- Signing Key: Select any available key - Signing Key: Select any available key
- Redirect URIs: `https://grafana.company/login/generic_oauth` - Redirect URIs: `https://grafana.company/login/generic_oauth`
Note the Client ID and Client Secret values. Create an application, using the provider you've created above. Note the slug of the application you've created. Note the Client ID and Client Secret values. Create an application, using the provider you've created above. Note the slug of the application you've created.
## Grafana ## Grafana
import Tabs from '@theme/Tabs'; import Tabs from "@theme/Tabs";
import TabItem from '@theme/TabItem'; import TabItem from "@theme/TabItem";
<Tabs <Tabs
defaultValue="docker" defaultValue="docker"
@ -56,6 +56,7 @@ environment:
# Optionally map user groups to Grafana roles # Optionally map user groups to Grafana roles
GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH: "contains(groups[*], 'Grafana Admins') && 'Admin' || contains(groups[*], 'Grafana Editors') && 'Editor' || 'Viewer'" GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH: "contains(groups[*], 'Grafana Admins') && 'Admin' || contains(groups[*], 'Grafana Editors') && 'Editor' || 'Viewer'"
``` ```
</TabItem> </TabItem>
<TabItem value="standalone"> <TabItem value="standalone">
If you are using a config-file instead, you have to set these options: If you are using a config-file instead, you have to set these options:
@ -78,6 +79,7 @@ api_url = https://authentik.company/application/o/userinfo/
# Optionally map user groups to Grafana roles # Optionally map user groups to Grafana roles
role_attribute_path = contains(groups[*], 'Grafana Admins') && 'Admin' || contains(groups[*], 'Grafana Editors') && 'Editor' || 'Viewer' role_attribute_path = contains(groups[*], 'Grafana Admins') && 'Admin' || contains(groups[*], 'Grafana Editors') && 'Editor' || 'Viewer'
``` ```
</TabItem> </TabItem>
</Tabs> </Tabs>

View file

@ -14,14 +14,14 @@ Harbor is an open source container image registry that secures images with role-
The following placeholders will be used: The following placeholders will be used:
- `harbor.company` is the FQDN of the Harbor install. - `harbor.company` is the FQDN of the Harbor install.
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
Create an OAuth2/OpenID provider with the following parameters: Create an OAuth2/OpenID provider with the following parameters:
- Client Type: `Confidential` - Client Type: `Confidential`
- Redirect URIs: `https://harbor.company/c/oidc/callback` - Redirect URIs: `https://harbor.company/c/oidc/callback`
- Scopes: OpenID, Email and Profile - Scopes: OpenID, Email and Profile
Note the Client ID and Client Secret values. Create an application, using the provider you've created above. Note the Client ID and Client Secret values. Create an application, using the provider you've created above.

View file

@ -18,8 +18,8 @@ This is based on authentik 2022.2.1 and Vault 1.9.3. Instructions may differ bet
The following placeholders will be used: The following placeholders will be used:
- `authentik.company` is the FQDN of authentik. - `authentik.company` is the FQDN of authentik.
- `vault.company` is the FQDN of Vault. - `vault.company` is the FQDN of Vault.
### Step 1 ### Step 1
@ -31,15 +31,17 @@ Only settings that have been modified from default have been listed.
**Protocol Settings** **Protocol Settings**
- Name: Vault - Name: Vault
- Signing Key: Select any available key - Signing Key: Select any available key
- Redirect URIs/Origins:
- Redirect URIs/Origins:
``` ```
https://vault.company/ui/vault/auth/oidc/oidc/callback https://vault.company/ui/vault/auth/oidc/oidc/callback
https://vault.company/oidc/callback https://vault.company/oidc/callback
http://localhost:8250/oidc/callback http://localhost:8250/oidc/callback
``` ```
:::note :::note
Take note of the `Client ID` and `Client Secret`, you'll need to give them to Vault in _Step 3_. Take note of the `Client ID` and `Client Secret`, you'll need to give them to Vault in _Step 3_.
::: :::
@ -52,16 +54,17 @@ In authentik, create an application (under _Resources/Applications_) which uses
Only settings that have been modified from default have been listed. Only settings that have been modified from default have been listed.
::: :::
- Name: Vault - Name: Vault
- Slug: vault-slug - Slug: vault-slug
- Provider: Vault - Provider: Vault
### Step 3 ### Step 3
Enable the oidc auth method Enable the oidc auth method
```vault auth enable oidc``` `vault auth enable oidc`
Configure the oidc auth method, oidc discovery url is the OpenID Configuration Issuer in your provider Configure the oidc auth method, oidc discovery url is the OpenID Configuration Issuer in your provider
``` ```
vault write auth/oidc/config \ vault write auth/oidc/config \
oidc_discovery_url="https://authentik.company/application/o/vault-slug/" \ oidc_discovery_url="https://authentik.company/application/o/vault-slug/" \
@ -71,6 +74,7 @@ vault write auth/oidc/config \
``` ```
Create the reader role Create the reader role
``` ```
vault write auth/oidc/role/reader \ vault write auth/oidc/role/reader \
bound_audiences="Client ID" \ bound_audiences="Client ID" \
@ -82,4 +86,4 @@ vault write auth/oidc/role/reader \
``` ```
You should then be able to sign in via OIDC You should then be able to sign in via OIDC
```vault login -method=oidc role="reader"``` `vault login -method=oidc role="reader"`

View file

@ -14,15 +14,15 @@ HedgeDoc lets you create real-time collaborative markdown notes.
The following placeholders will be used: The following placeholders will be used:
- `hedgedoc.company` is the FQDN of the HedgeDoc install. - `hedgedoc.company` is the FQDN of the HedgeDoc install.
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
Create an application in authentik. Create an OAuth2/OpenID provider with the following parameters: Create an application in authentik. Create an OAuth2/OpenID provider with the following parameters:
- Client Type: `Confidential` - Client Type: `Confidential`
- Scopes: OpenID, Email and Profile - Scopes: OpenID, Email and Profile
- Signing Key: Select any available key - Signing Key: Select any available key
- Redirect URIs: `https://hedgedoc.company/auth/oauth2/callback` - Redirect URIs: `https://hedgedoc.company/auth/oauth2/callback`
Note the Client ID and Client Secret values. Create an application, using the provider you've created above. Note the Client ID and Client Secret values. Create an application, using the provider you've created above.
@ -33,14 +33,14 @@ You need to set the following `env` Variables for Docker based installations.
Set the following values: Set the following values:
```yaml ```yaml
CMD_OAUTH2_PROVIDERNAME: 'authentik' CMD_OAUTH2_PROVIDERNAME: "authentik"
CMD_OAUTH2_CLIENT_ID: '<Client ID from above>' CMD_OAUTH2_CLIENT_ID: "<Client ID from above>"
CMD_OAUTH2_CLIENT_SECRET: '<Client Secret from above>' CMD_OAUTH2_CLIENT_SECRET: "<Client Secret from above>"
CMD_OAUTH2_SCOPE: 'openid email profile' CMD_OAUTH2_SCOPE: "openid email profile"
CMD_OAUTH2_USER_PROFILE_URL: 'https://authentik.company/application/o/userinfo/' CMD_OAUTH2_USER_PROFILE_URL: "https://authentik.company/application/o/userinfo/"
CMD_OAUTH2_TOKEN_URL: 'https://authentik.company/application/o/token/' CMD_OAUTH2_TOKEN_URL: "https://authentik.company/application/o/token/"
CMD_OAUTH2_AUTHORIZATION_URL: 'https://authentik.company/application/o/authorize/' CMD_OAUTH2_AUTHORIZATION_URL: "https://authentik.company/application/o/authorize/"
CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR: 'preferred_username' CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR: "preferred_username"
CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR: 'name' CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR: "name"
CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR: 'email' CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR: "email"
``` ```

View file

@ -18,8 +18,8 @@ You might run into CSRF errors, this is caused by Home-assistant and not authent
The following placeholders will be used: The following placeholders will be used:
- `hass.company` is the FQDN of the Home-Assistant install. - `hass.company` is the FQDN of the Home-Assistant install.
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
:::note :::note
This setup uses https://github.com/BeryJu/hass-auth-header and the authentik proxy for authentication. When this [PR](https://github.com/home-assistant/core/pull/32926) is merged, this will no longer be necessary. This setup uses https://github.com/BeryJu/hass-auth-header and the authentik proxy for authentication. When this [PR](https://github.com/home-assistant/core/pull/32926) is merged, this will no longer be necessary.
@ -51,13 +51,13 @@ additionalHeaders:
Create a Proxy Provider with the following values Create a Proxy Provider with the following values
- Internal host - Internal host
If Home-Assistant is running in docker, and you're deploying the authentik proxy on the same host, set the value to `http://homeassistant:8123`, where Home-Assistant is the name of your container. If Home-Assistant is running in docker, and you're deploying the authentik proxy on the same host, set the value to `http://homeassistant:8123`, where Home-Assistant is the name of your container.
If Home-Assistant is running on a different server than where you are deploying the authentik proxy, set the value to `http://hass.company:8123`. If Home-Assistant is running on a different server than where you are deploying the authentik proxy, set the value to `http://hass.company:8123`.
- External host - External host
Set this to the external URL you will be accessing Home-Assistant from. Set this to the external URL you will be accessing Home-Assistant from.

View file

@ -14,26 +14,26 @@ Kimai is a free & open source timetracker. It tracks work time and prints out a
The following placeholders will be used: The following placeholders will be used:
- `kimai.company` is the FQDN of the Kimai Install - `kimai.company` is the FQDN of the Kimai Install
- `authentik.company` is the FQDN of the authentik Install - `authentik.company` is the FQDN of the authentik Install
- `admin.group` is the authentik group to be made Admin in Kimai - `admin.group` is the authentik group to be made Admin in Kimai
Create an application in authentik and use the slug for later as `<application-slug>`. Create an application in authentik and use the slug for later as `<application-slug>`.
Create a SAML provider with the following parameters: Create a SAML provider with the following parameters:
- ACS URL: `https://kimai.company/auth/saml/acs` - ACS URL: `https://kimai.company/auth/saml/acs`
- Audience: `https://kimai.company/auth/saml` - Audience: `https://kimai.company/auth/saml`
- Issuer: `https://authentik.company` - Issuer: `https://authentik.company`
- Binding: `Post` - Binding: `Post`
Under *Advanced protocol settings*, set a certificate for *Signing Certificate*. Under _Advanced protocol settings_, set a certificate for _Signing Certificate_.
## Kimai Configuration ## Kimai Configuration
Paste the following block in your `local.yaml` file, after replacing the placeholder values from above. The file is usually located in `/opt/kimai/config/packages/local.yaml`. Paste the following block in your `local.yaml` file, after replacing the placeholder values from above. The file is usually located in `/opt/kimai/config/packages/local.yaml`.
To get the value for `x509cert`, go to *System* > *Certificates*, and download the public Signing Certificate. To avoid further problems, concat it into "string format" using e.g.: https://www.samltool.com/format_x509cert.php To get the value for `x509cert`, go to _System_ > _Certificates_, and download the public Signing Certificate. To avoid further problems, concat it into "string format" using e.g.: https://www.samltool.com/format_x509cert.php
```yaml ```yaml
# Optionally add this for docker debug-logging # Optionally add this for docker debug-logging
@ -43,75 +43,74 @@ To get the value for `x509cert`, go to *System* > *Certificates*, and download t
# path: php://stderr # path: php://stderr
kimai: kimai:
saml: saml:
activate: true activate: true
title: Login with authentik title: Login with authentik
mapping: mapping:
- { - {
saml: $http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress, saml: $http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress,
kimai: email, kimai: email,
} }
- { - {
saml: $http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name, saml: $http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name,
kimai: alias, kimai: alias,
} }
roles: roles:
attribute: http://schemas.xmlsoap.org/claims/Group attribute: http://schemas.xmlsoap.org/claims/Group
mapping: mapping:
# Insert your roles here (ROLE_USER is added automatically) # Insert your roles here (ROLE_USER is added automatically)
- { saml: admin.group, kimai: ROLE_ADMIN } - { saml: admin.group, kimai: ROLE_ADMIN }
connection: connection:
# You SAML provider # You SAML provider
# Your authentik instance, replace https://authentik.company with your authentik URL # Your authentik instance, replace https://authentik.company with your authentik URL
idp: idp:
entityId: "https://authentik.company/" entityId: "https://authentik.company/"
singleSignOnService: singleSignOnService:
url: "https://authentik.company/application/saml/<application-slug>/sso/binding/redirect/" url: "https://authentik.company/application/saml/<application-slug>/sso/binding/redirect/"
binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
# the "single logout" feature was not yet tested, if you want to help, please let me know! # the "single logout" feature was not yet tested, if you want to help, please let me know!
singleLogoutService: singleLogoutService:
url: "https://authentik.company/if/session-end/<application-slug>/" url: "https://authentik.company/if/session-end/<application-slug>/"
binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
# Signing certificate from *Advanced protocol settings* # Signing certificate from *Advanced protocol settings*
x509cert: "XXXXXXXXXXXXXXXXXXXXXXXXXXX==" x509cert: "XXXXXXXXXXXXXXXXXXXXXXXXXXX=="
# Service Provider Data that we are deploying. # Service Provider Data that we are deploying.
# Your Kimai instance, replace https://kimai.company with your Kimai URL # Your Kimai instance, replace https://kimai.company with your Kimai URL
sp: sp:
entityId: "https://kimai.company/" entityId: "https://kimai.company/"
assertionConsumerService: assertionConsumerService:
url: "https://kimai.company/auth/saml/acs" url: "https://kimai.company/auth/saml/acs"
binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
singleLogoutService: singleLogoutService:
url: "https://kimai.company/auth/saml/logout" url: "https://kimai.company/auth/saml/logout"
binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
#privateKey: '' #privateKey: ''
# only set baseurl, if auto-detection doesn't work # only set baseurl, if auto-detection doesn't work
baseurl: "https://kimai.company/auth/saml/" baseurl: "https://kimai.company/auth/saml/"
strict: false strict: false
debug: true debug: true
security: security:
nameIdEncrypted: false nameIdEncrypted: false
authnRequestsSigned: false authnRequestsSigned: false
logoutRequestSigned: false logoutRequestSigned: false
logoutResponseSigned: false logoutResponseSigned: false
wantMessagesSigned: false wantMessagesSigned: false
wantAssertionsSigned: false wantAssertionsSigned: false
wantNameIdEncrypted: false wantNameIdEncrypted: false
requestedAuthnContext: true requestedAuthnContext: true
signMetadata: false signMetadata: false
wantXMLValidation: true wantXMLValidation: true
signatureAlgorithm: "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" signatureAlgorithm: "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
digestAlgorithm: "http://www.w3.org/2001/04/xmlenc#sha256" digestAlgorithm: "http://www.w3.org/2001/04/xmlenc#sha256"
contactPerson: contactPerson:
technical: technical:
givenName: "Kimai Admin" givenName: "Kimai Admin"
emailAddress: "admin@example.com" emailAddress: "admin@example.com"
organization: organization:
en: en:
name: "Kimai" name: "Kimai"
displayname: "Kimai" displayname: "Kimai"
url: "https://kimai.company" url: "https://kimai.company"
``` ```
Afterwards, either [rebuild the cache](https://www.kimai.org/documentation/cache.html) or restart the docker container. Afterwards, either [rebuild the cache](https://www.kimai.org/documentation/cache.html) or restart the docker container.

View file

@ -15,15 +15,15 @@ reference implementations.
The following placeholders will be used: The following placeholders will be used:
- `matrix.company` is the FQDN of the Matrix install. - `matrix.company` is the FQDN of the Matrix install.
- `authentik.company` is the FQDN of the authentik install. - `authentik.company` is the FQDN of the authentik install.
Create an application in authentik. Create an OAuth2/OpenID provider with the following parameters: Create an application in authentik. Create an OAuth2/OpenID provider with the following parameters:
- Client Type: `Confidential` - Client Type: `Confidential`
- Scopes: OpenID, Email and Profile - Scopes: OpenID, Email and Profile
- Signing Key: Select any available key - Signing Key: Select any available key
- Redirect URIs: `https://matrix.company/_synapse/client/oidc/callback` - Redirect URIs: `https://matrix.company/_synapse/client/oidc/callback`
Note the Client ID and Client Secret values. Create an application, using the provider you've created above. Note the slug of the application you've created. Note the Client ID and Client Secret values. Create an application, using the provider you've created above. Note the slug of the application you've created.
@ -37,18 +37,18 @@ For more info, see https://matrix-org.github.io/synapse/latest/openid.html?highl
```yaml ```yaml
oidc_providers: oidc_providers:
- idp_id: authentik - idp_id: authentik
idp_name: authentik idp_name: authentik
discover: true discover: true
issuer: "https://authentik.company/application/o/app-slug/" issuer: "https://authentik.company/application/o/app-slug/"
client_id: "*client id*" client_id: "*client id*"
client_secret: "*client secret*" client_secret: "*client secret*"
scopes: scopes:
- "openid" - "openid"
- "profile" - "profile"
- "email" - "email"
user_mapping_provider: user_mapping_provider:
config: config:
localpart_template: "{{ user.preferred_username }}" localpart_template: "{{ user.preferred_username }}"
display_name_template: "{{ user.name|capitalize }}" display_name_template: "{{ user.name|capitalize }}"
``` ```

Some files were not shown because too many files have changed in this diff Show more