Compare commits

..

38 Commits

Author SHA1 Message Date
74deedc9d4 a bit more structure and more ideas
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-22 01:53:21 +01:00
3c8232b9a5 add database aware scheduler with tenant support
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-22 01:52:23 +01:00
4af415f3fd web/user: fix race condition in user settings flow executor (#13163)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-21 20:35:54 +01:00
ef82143811 web/admin: only show message when not editing an application (#13165)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-21 20:35:33 +01:00
c7567e031a root: allow configuring session cookie age (#12389) 2025-02-21 18:21:35 +00:00
3b2cd9e8d6 ci: update poetry sync command (#13161) 2025-02-21 18:19:18 +00:00
261e18b3d6 web/user: fix RAC launch not opening when clicking icon (#13164)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-21 19:18:41 +01:00
51a0f7d314 website/docs: troubleshooting: fix missing command prefix for create admin group command in Docker (#13107) 2025-02-21 18:47:30 +01:00
041ffef812 website: bump disqus-react from 1.1.5 to 1.1.6 in /website (#13152)
Bumps [disqus-react](https://github.com/disqus/disqus-react) from 1.1.5 to 1.1.6.
- [Release notes](https://github.com/disqus/disqus-react/releases)
- [Changelog](https://github.com/disqus/disqus-react/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/disqus/disqus-react/compare/v1.1.5...v1.1.6)

---
updated-dependencies:
- dependency-name: disqus-react
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 17:47:30 +01:00
68b4d58ebd website: bump docusaurus-theme-openapi-docs from 4.3.4 to 4.3.5 in /website (#13154)
website: bump docusaurus-theme-openapi-docs in /website

Bumps [docusaurus-theme-openapi-docs](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/tree/HEAD/packages/docusaurus-theme-openapi-docs) from 4.3.4 to 4.3.5.
- [Release notes](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/releases)
- [Changelog](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/commits/v4.3.5/packages/docusaurus-theme-openapi-docs)

---
updated-dependencies:
- dependency-name: docusaurus-theme-openapi-docs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 17:30:49 +01:00
881571bd14 core: bump ruff from 0.9.6 to 0.9.7 (#13150)
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.6 to 0.9.7.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.9.6...0.9.7)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 17:18:01 +01:00
64a0f66e62 core: bump twilio from 9.4.5 to 9.4.6 (#13151)
Bumps [twilio](https://github.com/twilio/twilio-python) from 9.4.5 to 9.4.6.
- [Release notes](https://github.com/twilio/twilio-python/releases)
- [Changelog](https://github.com/twilio/twilio-python/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-python/compare/9.4.5...9.4.6)

---
updated-dependencies:
- dependency-name: twilio
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 17:17:46 +01:00
7d5cda4c25 website: bump docusaurus-plugin-openapi-docs from 4.3.4 to 4.3.5 in /website (#13153)
website: bump docusaurus-plugin-openapi-docs in /website

Bumps [docusaurus-plugin-openapi-docs](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/tree/HEAD/packages/docusaurus-plugin-openapi-docs) from 4.3.4 to 4.3.5.
- [Release notes](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/releases)
- [Changelog](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/commits/v4.3.5/packages/docusaurus-plugin-openapi-docs)

---
updated-dependencies:
- dependency-name: docusaurus-plugin-openapi-docs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 17:17:26 +01:00
8ba2679036 core: bump selenium from 4.28.1 to 4.29.0 (#13155)
Bumps [selenium](https://github.com/SeleniumHQ/Selenium) from 4.28.1 to 4.29.0.
- [Release notes](https://github.com/SeleniumHQ/Selenium/releases)
- [Commits](https://github.com/SeleniumHQ/Selenium/commits/selenium-4.29.0)

---
updated-dependencies:
- dependency-name: selenium
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 17:17:07 +01:00
d98523f243 web/user: fix post MFA creation link being invalid (#13157)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-21 16:43:01 +01:00
6da0548fa2 scripts: fix broken link (#13156)
fix broken link
2025-02-21 12:51:51 +01:00
8734710e61 website: bump semver from 7.7.0 to 7.7.1 in /website (#13129)
Bumps [semver](https://github.com/npm/node-semver) from 7.7.0 to 7.7.1.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.7.0...v7.7.1)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 01:02:47 +01:00
64b996aa1f website: bump postcss from 8.5.2 to 8.5.3 in /website (#13130)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.2 to 8.5.3.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.2...8.5.3)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 01:02:37 +01:00
dbe91cbc55 core: bump kubernetes from 32.0.0 to 32.0.1 (#13131)
Bumps [kubernetes](https://github.com/kubernetes-client/python) from 32.0.0 to 32.0.1.
- [Release notes](https://github.com/kubernetes-client/python/releases)
- [Changelog](https://github.com/kubernetes-client/python/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes-client/python/compare/v32.0.0...v32.0.1)

---
updated-dependencies:
- dependency-name: kubernetes
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 01:02:28 +01:00
a56e037eae core: bump duo-client from 5.3.0 to 5.4.0 (#13132)
Bumps [duo-client](https://github.com/duosecurity/duo_client_python) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/duosecurity/duo_client_python/releases)
- [Commits](https://github.com/duosecurity/duo_client_python/compare/5.3.0...5.4.0)

---
updated-dependencies:
- dependency-name: duo-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 01:02:20 +01:00
b8f1e2fac0 lifecycle/aws: bump aws-cdk from 2.179.0 to 2.1000.2 in /lifecycle/aws (#13133)
Bumps [aws-cdk](https://github.com/aws/aws-cdk-cli/tree/HEAD/packages/aws-cdk) from 2.179.0 to 2.1000.2.
- [Commits](https://github.com/aws/aws-cdk-cli/commits/HEAD/packages/aws-cdk)

---
updated-dependencies:
- dependency-name: aws-cdk
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 01:02:07 +01:00
e1b56aac05 core: bump goauthentik.io/api/v3 from 3.2024123.6 to 3.2024123.7 (#13134)
Bumps [goauthentik.io/api/v3](https://github.com/goauthentik/client-go) from 3.2024123.6 to 3.2024123.7.
- [Release notes](https://github.com/goauthentik/client-go/releases)
- [Changelog](https://github.com/goauthentik/client-go/blob/main/model_version_history.go)
- [Commits](https://github.com/goauthentik/client-go/compare/v3.2024123.6...v3.2024123.7)

---
updated-dependencies:
- dependency-name: goauthentik.io/api/v3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 01:01:58 +01:00
794731eed7 core: bump github.com/prometheus/client_golang from 1.20.5 to 1.21.0 (#13135)
Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.20.5 to 1.21.0.
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.20.5...v1.21.0)

---
updated-dependencies:
- dependency-name: github.com/prometheus/client_golang
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 01:01:25 +01:00
19fbc2a022 enterprise/stages/source: fix Source stage not executing authentication/enrollment flow (#12875)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-20 23:27:08 +01:00
38e467bf8e policies/geoip: fix math in impossible travel (#13141)
* policies/geoip: fix math in impossible travel

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix threshold

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-20 23:26:26 +01:00
9e32cf361b core: bump zxcvbn from 4.4.28 to 4.5.0 (#13128)
Bumps [zxcvbn](https://github.com/dwolfhub/zxcvbn-python) from 4.4.28 to 4.5.0.
- [Changelog](https://github.com/dwolfhub/zxcvbn-python/blob/master/CHANGELOG.md)
- [Commits](https://github.com/dwolfhub/zxcvbn-python/compare/v4.4.28...v4.5.0)

---
updated-dependencies:
- dependency-name: zxcvbn
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-20 16:14:55 +01:00
42a5a43640 revert: rbac: exclude permissions for internal models (#12803) (#13138)
Revert "rbac: exclude permissions for internal models (#12803)"

This reverts commit e08ccf4ca0.
2025-02-20 15:12:23 +01:00
8d5b835c4f web/flows: fix error on interactive Captcha stage when retrying captcha (#13119)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-20 15:00:57 +01:00
ca3b948895 web: Indicate when caps-lock is active during password input. (#12733)
Determining the state of the caps-lock key can be tricky as we're
dependant on a user-provided input to set a value. Thus, our initial
state defaults to not display any warning until the first keystroke.

- Revise to better use lit-html.
2025-02-19 10:38:27 -08:00
a714c781a6 website: Use Docusaurus Frontmatter for badges (#12893)
website/docs: Reduce redundant usage of badges. Move badge logic to components.

- Fix JSX class name warning.
- Remove duplicate titles.
- Flesh out `support_level` frontmatter.
2025-02-19 18:03:05 +00:00
df2e3878d5 sources/oauth: add group sync for azure_ad (#12894)
* sources/oauth: add group sync for azure_ad

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* make group sync optional

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-19 17:57:47 +01:00
1370c32aea cmd: set version in outposts (#13116)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-19 17:56:57 +01:00
0ae373bc1e web/admin: update Application Wizard button placement (#12771)
* web: Add InvalidationFlow to Radius Provider dialogues

## What

- Bugfix: adds the InvalidationFlow to the Radius Provider dialogues
  - Repairs: `{"invalidation_flow":["This field is required."]}` message, which was *not* propagated
    to the Notification.
- Nitpick: Pretties `?foo=${true}` expressions: `s/\?([^=]+)=\$\{true\}/\1/`

## Note

Yes, I know I'm going to have to do more magic when we harmonize the forms, and no, I didn't add the
Property Mappings to the wizard, and yes, I know I'm going to have pain with the *new* version of
the wizard. But this is a serious bug; you can't make Radius servers with *either* of the current
dialogues at the moment.

* This (temporary) change is needed to prevent the unit tests from failing.

\# What

\# Why

\# How

\# Designs

\# Test Steps

\# Other Notes

* Revert "This (temporary) change is needed to prevent the unit tests from failing."

This reverts commit dddde09be5.

* web: Make using the wizard the default for new applications

# What

1. I removed the "Wizard Hint" bar and migrated the "Create With Wizard" button down to the default
   position as "Create With Provider," moving the "Create" button to a secondary position.
   Primary coloring has been kept for both.

2. Added an alert to the "Create" legacy dialog:

> Using this form will only create an Application. In order to authenticate with the application,
> you will have to manually pair it with a Provider.

3. Updated the subtitle on the Wizard dialog:

``` diff
-    wizardDescription = msg("Create a new application");
+    wizardDescription = msg("Create a new application and configure a provider for it.");
```

4. Updated the User page so that, if the User is-a Administrator and the number of Applications in
   the system is zero, the user will be invited to create a new Application using the Wizard rather
   than the legacy Form:

```diff
     renderNewAppButton() {
         const href = paramURL("/core/applications", {
-            createForm: true,
+            createWizard: true,
         });
```

5. Fixed a bug where, on initial render, if the `this.brand` field was not available, an error would
   appear in the console. The effects were usually harmless, as brand information came quickly and
   filled in before the user could notice, but it looked bad in the debugger.

6. Fixed a bug in testing where the wizard page "Configure Policy Bindings" had been changed to
   "Configure Policy/User/Group Binding".

# Testing

Since the wizard OUID didn't change (`data-ouia-component-id="start-application-wizard"`), the E2E
tests for "Application Wizard" completed without any substantial changes to the routine or to the
tests.

``` sh
npm run test:e2e:watch -- --spec ./tests/specs/new-application-by-wizard.ts
```

# User documentation changes required.

These changes were made at the request of docs, as an initial draft to show how the page looks with
the Application Wizard as he default tool for creating new Applications.

# Developer documentation changes required.

None.
2025-02-19 08:41:39 -08:00
6facb5872e web/user: fix opening application with Enter not respecting new tab setting (#13115)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-19 15:49:40 +01:00
c67de17dd8 web: bump API Client version (#13113)
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: authentik-automation[bot] <135050075+authentik-automation[bot]@users.noreply.github.com>
2025-02-19 13:16:28 +01:00
2128e7f45f providers/rac: move to open source (#13015)
* move RAC to open source

* move web out of enterprise

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* remove enterprise license requirements from RAC

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Jens Langhammer <jens@goauthentik.io>
2025-02-19 12:48:11 +01:00
0e7a4849f6 website/docs: add 2025.2 release notes (#13002)
* website/docs: add 2025.2 release notes

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* make compile

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* ffs

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* ffs

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-19 01:43:39 +01:00
85343fa5d4 core: clear expired database sessions (#13105)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-02-18 20:40:03 +01:00
252 changed files with 1685 additions and 1706 deletions

View File

@ -1,16 +1,16 @@
[bumpversion]
current_version = 2025.2.0
current_version = 2024.12.3
tag = True
commit = True
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?:-(?P<rc_t>[a-zA-Z-]+)(?P<rc_n>[1-9]\\d*))?
serialize =
serialize =
{major}.{minor}.{patch}-{rc_t}{rc_n}
{major}.{minor}.{patch}
message = release: {new_version}
tag_name = version/{new_version}
[bumpversion:part:rc_t]
values =
values =
rc
final
optional_value = final

View File

@ -35,7 +35,7 @@ runs:
run: |
export PSQL_TAG=${{ inputs.postgresql_version }}
docker compose -f .github/actions/setup/docker-compose.yml up -d
poetry install --sync
poetry sync
cd web && npm ci
- name: Generate config
shell: poetry run python {0}

View File

@ -2,7 +2,7 @@
from os import environ
__version__ = "2025.2.0"
__version__ = "2024.12.3"
ENV_GIT_HASH_KEY = "GIT_BUILD_HASH"

View File

@ -8,8 +8,6 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
{# Darkreader breaks the site regardless of theme as its not compatible with webcomponents, and we default to a dark theme based on preferred colour-scheme #}
<meta name="darkreader-lock">
<title>{% block title %}{% trans title|default:brand.branding_title %}{% endblock %}</title>
<link rel="icon" href="{{ brand.branding_favicon_url }}">
<link rel="shortcut icon" href="{{ brand.branding_favicon_url }}">

View File

@ -0,0 +1,12 @@
"""Reporting app config"""
from authentik.enterprise.apps import EnterpriseConfig
class AuthentikEnterpriseReporting(EnterpriseConfig):
"""authentik enterprise reporting app config"""
name = "authentik.enterprise.reporting"
label = "authentik_reporting"
verbose_name = "authentik Enterprise.Reporting"
default = True

View File

@ -0,0 +1,22 @@
from structlog.stdlib import get_logger
from authentik.enterprise.reporting.models import Report
class ReportExecutor:
"""Execute a report"""
def __init__(self, report: Report) -> None:
self.report = report
self.logger = get_logger().bind(report=self.report)
def execute(self):
# 1. Run through policies bound to report itself
# 2. Get all bound components by running through ReportComponentBinding,
# while evaluating policies bound to each
# 3. render the actual components
# 4. Store the final data...somewhere??
# 5. Optionally render PDF via chromedriver (special frontend that uses API)
# (not required for MVP)
# 6. Send out link to CSV/PDF or attach to email via delivery
pass

View File

@ -0,0 +1,131 @@
# Generated by Django 5.0.4 on 2024-04-18 21:47
import authentik.lib.models
import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
("authentik_events", "0007_event_authentik_e_action_9a9dd9_idx_and_more"),
("authentik_policies", "0011_policybinding_failure_result_and_more"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="ReportComponent",
fields=[
(
"widget_uuid",
models.UUIDField(
default=uuid.uuid4, editable=False, primary_key=True, serialize=False
),
),
],
options={
"verbose_name": "Report Component",
"verbose_name_plural": "Report Components",
},
),
migrations.CreateModel(
name="Report",
fields=[
(
"policybindingmodel_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="authentik_policies.policybindingmodel",
),
),
("name", models.TextField()),
("schedule", models.TextField()),
("output_type", models.TextField(choices=[("csv", "Csv"), ("pdf", "Pdf")])),
(
"delivery",
models.ForeignKey(
default=None,
null=True,
on_delete=django.db.models.deletion.SET_DEFAULT,
to="authentik_events.notificationtransport",
),
),
(
"run_as",
models.ForeignKey(
default=None,
null=True,
on_delete=django.db.models.deletion.SET_DEFAULT,
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"verbose_name": "Report",
"verbose_name_plural": "Reports",
},
bases=("authentik_policies.policybindingmodel", models.Model),
),
migrations.CreateModel(
name="ReportComponentBinding",
fields=[
(
"policybindingmodel_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
to="authentik_policies.policybindingmodel",
),
),
(
"binding_uuid",
models.UUIDField(
default=uuid.uuid4, editable=False, primary_key=True, serialize=False
),
),
("enabled", models.BooleanField(default=True)),
("layout_x", models.PositiveIntegerField(default=0)),
("layout_y", models.PositiveIntegerField(default=0)),
(
"target",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="authentik_reporting.report"
),
),
(
"widget",
authentik.lib.models.InheritanceForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="authentik_reporting.reportcomponent",
),
),
],
options={
"verbose_name": "Report Component Binding",
"verbose_name_plural": "Report Component Bindings",
"unique_together": {("target", "widget")},
},
bases=("authentik_policies.policybindingmodel", models.Model),
),
migrations.AddField(
model_name="report",
name="components",
field=models.ManyToManyField(
blank=True,
related_name="bindings",
through="authentik_reporting.ReportComponentBinding",
to="authentik_reporting.reportcomponent",
),
),
]

View File

@ -0,0 +1,87 @@
"""Reporting models"""
from uuid import uuid4
from celery.schedules import crontab
from django.db import models
from django.utils.translation import gettext_lazy as _
from authentik.events.models import NotificationTransport
from authentik.lib.models import InheritanceForeignKey, SerializerModel
from authentik.policies.models import PolicyBindingModel
class OutputType(models.TextChoices):
"""Different choices in which a report can be 'rendered'"""
csv = "csv"
pdf = "pdf"
class Report(SerializerModel, PolicyBindingModel):
"""A report with a defined list of components, which can run on a schedule"""
name = models.TextField()
schedule = models.TextField()
# User under which permissions the queries are run,
# when no user is selected the report is inactive
run_as = models.ForeignKey(
"authentik_core.user", on_delete=models.SET_DEFAULT, default=None, null=True
)
components = models.ManyToManyField(
"ReportComponent", through="ReportComponentBinding", related_name="bindings", blank=True
)
output_type = models.TextField(choices=OutputType.choices)
# Use notification transport to send report result (either link for webhook based?
# maybe send full csv?) or fully rendered PDF via Email
# when no transport is selected, reports are not sent anywhere but can be retrieved in authentik
delivery = models.ForeignKey(
NotificationTransport, on_delete=models.SET_DEFAULT, default=None, null=True
)
def __str__(self) -> str:
return self.name
def get_celery_schedule(self) -> crontab:
return crontab(*self.schedule.split())
class Meta:
verbose_name = _("Report")
verbose_name_plural = _("Reports")
class ReportComponentBinding(SerializerModel, PolicyBindingModel):
"""Binding of a component to a report"""
binding_uuid = models.UUIDField(primary_key=True, editable=False, default=uuid4)
enabled = models.BooleanField(default=True)
layout_x = models.PositiveIntegerField(default=0)
layout_y = models.PositiveIntegerField(default=0)
target = models.ForeignKey("Report", on_delete=models.CASCADE)
widget = InheritanceForeignKey("ReportComponent", on_delete=models.CASCADE, related_name="+")
def __str__(self) -> str:
return f"Binding from {self.report.name} to {self.widget}"
class Meta:
verbose_name = _("Report Component Binding")
verbose_name_plural = _("Report Component Bindings")
unique_together = ("target", "widget")
class ReportComponent(SerializerModel):
"""An individual component of a report, a query or graph, etc"""
widget_uuid = models.UUIDField(primary_key=True, editable=False, default=uuid4)
def __str__(self) -> str:
return super().__str__()
class Meta:
verbose_name = _("Report Component")
verbose_name_plural = _("Report Components")

View File

@ -0,0 +1,38 @@
from json import dumps
from django.db.models.signals import post_save, pre_delete
from django.dispatch import receiver
from django_celery_beat.models import CrontabSchedule, PeriodicTask
from authentik.enterprise.reporting.models import Report
@receiver(post_save, sender=Report)
def report_post_save(sender, instance: Report, **_):
if instance.schedule == "":
return
schedule = CrontabSchedule.from_schedule(instance.get_celery_schedule())
schedule.save()
PeriodicTask.objects.update_or_create(
name=str(instance.pk),
defaults={
"crontab": schedule,
"task": "authentik.enterprise.reporting.tasks.process_report",
"queue": "authentik_reporting",
"description": f"Report {instance.name}",
"kwargs": dumps(
{
"report_uuid": str(instance.pk),
}
),
},
)
@receiver(pre_delete, sender=Report)
def report_pre_delete(sender, instance: Report, **_):
if instance.schedule == "":
return
PeriodicTask.objects.filter(name=str(instance.pk)).delete()
# Cleanup schedules without any tasks
CrontabSchedule.objects.filter(periodictask__isnull=True).delete()

View File

@ -0,0 +1,11 @@
from authentik.enterprise.reporting.executor import ReportExecutor
from authentik.enterprise.reporting.models import Report
from authentik.root.celery import CELERY_APP
@CELERY_APP.task()
def process_report(report_uuid: str):
report = Report.objects.filter(pk=report_uuid).first()
if not report or not report.run_as:
return
ReportExecutor(report).execute()

View File

@ -17,6 +17,7 @@ TENANT_APPS = [
"authentik.enterprise.providers.google_workspace",
"authentik.enterprise.providers.microsoft_entra",
"authentik.enterprise.providers.ssf",
"authentik.enterprise.reporting",
"authentik.enterprise.stages.authenticator_endpoint_gdtc",
"authentik.enterprise.stages.source",
]

View File

@ -64,6 +64,8 @@ debugger: false
log_level: info
session_storage: cache
sessions:
unauthenticated_age: days=1
error_reporting:
enabled: false

View File

@ -16,6 +16,7 @@ from authentik.lib.config import CONFIG, django_db_config, redis_url
from authentik.lib.logging import get_logger_config, structlog_configure
from authentik.lib.sentry import sentry_init
from authentik.lib.utils.reflection import get_env
from authentik.lib.utils.time import timedelta_from_string
from authentik.stages.password import BACKEND_APP_PASSWORD, BACKEND_INBUILT, BACKEND_LDAP
BASE_DIR = Path(__file__).absolute().parent.parent.parent
@ -124,6 +125,7 @@ TENANT_APPS = [
"authentik.brands",
"authentik.blueprints",
"guardian",
"django_celery_beat",
]
TENANT_MODEL = "authentik_tenants.Tenant"
@ -242,6 +244,9 @@ SESSION_CACHE_ALIAS = "default"
# Configured via custom SessionMiddleware
# SESSION_COOKIE_SAMESITE = "None"
# SESSION_COOKIE_SECURE = True
SESSION_COOKIE_AGE = timedelta_from_string(
CONFIG.get("sessions.unauthenticated_age", "days=1")
).total_seconds()
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
MESSAGE_STORAGE = "authentik.root.messages.storage.ChannelsStorage"

View File

@ -1,14 +1,18 @@
"""Tenant-aware Celery beat scheduler"""
from tenant_schemas_celery.scheduler import (
TenantAwarePersistentScheduler as BaseTenantAwarePersistentScheduler,
)
from tenant_schemas_celery.scheduler import TenantAwareScheduleEntry
from django_celery_beat.schedulers import DatabaseScheduler, ModelEntry
from tenant_schemas_celery.scheduler import TenantAwareScheduleEntry, TenantAwareSchedulerMixin
class TenantAwarePersistentScheduler(BaseTenantAwarePersistentScheduler):
class SchedulerEntry(ModelEntry, TenantAwareScheduleEntry):
pass
class TenantAwarePersistentScheduler(TenantAwareSchedulerMixin, DatabaseScheduler):
"""Tenant-aware Celery beat scheduler"""
Entry = SchedulerEntry
@classmethod
def get_queryset(cls):
return super().get_queryset().filter(ready=True)

View File

@ -2,7 +2,7 @@
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "https://goauthentik.io/blueprints/schema.json",
"type": "object",
"title": "authentik 2025.2.0 Blueprint schema",
"title": "authentik 2024.12.3 Blueprint schema",
"required": [
"version",
"entries"

View File

@ -31,7 +31,7 @@ services:
volumes:
- redis:/data
server:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.2.0}
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.12.3}
restart: unless-stopped
command: server
environment:
@ -54,7 +54,7 @@ services:
redis:
condition: service_healthy
worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.2.0}
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.12.3}
restart: unless-stopped
command: worker
environment:

10
go.mod
View File

@ -22,14 +22,14 @@ require (
github.com/mitchellh/mapstructure v1.5.0
github.com/nmcclain/asn1-ber v0.0.0-20170104154839-2661553a0484
github.com/pires/go-proxyproto v0.8.0
github.com/prometheus/client_golang v1.20.5
github.com/prometheus/client_golang v1.21.0
github.com/redis/go-redis/v9 v9.7.0
github.com/sethvargo/go-envconfig v1.1.1
github.com/sirupsen/logrus v1.9.3
github.com/spf13/cobra v1.9.1
github.com/stretchr/testify v1.10.0
github.com/wwt/guac v1.3.2
goauthentik.io/api/v3 v3.2024123.6
goauthentik.io/api/v3 v3.2024123.7
golang.org/x/exp v0.0.0-20230210204819-062eb4c674ab
golang.org/x/oauth2 v0.26.0
golang.org/x/sync v0.11.0
@ -62,14 +62,14 @@ require (
github.com/go-openapi/validate v0.24.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/klauspost/compress v1.17.9 // indirect
github.com/klauspost/compress v1.17.11 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.55.0 // indirect
github.com/prometheus/common v0.62.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/spf13/pflag v1.0.6 // indirect
go.mongodb.org/mongo-driver v1.14.0 // indirect
@ -79,6 +79,6 @@ require (
golang.org/x/crypto v0.31.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
google.golang.org/protobuf v1.34.2 // indirect
google.golang.org/protobuf v1.36.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

20
go.sum
View File

@ -207,8 +207,8 @@ github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFF
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
@ -239,13 +239,13 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
github.com/prometheus/client_golang v1.21.0 h1:DIsaGmiaBkSangBgMtWdNfxbMNdku5IK6iNhrEqWvdA=
github.com/prometheus/client_golang v1.21.0/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc=
github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8=
github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E=
@ -299,8 +299,8 @@ go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
goauthentik.io/api/v3 v3.2024123.6 h1:AGOCa7Fc/9eONCPEW4sEhTiyEBvxN57Lfqz1zm6Gy98=
goauthentik.io/api/v3 v3.2024123.6/go.mod h1:zz+mEZg8rY/7eEjkMGWJ2DnGqk+zqxuybGCGrR2O4Kw=
goauthentik.io/api/v3 v3.2024123.7 h1:vjmEnxXTHGFylJ9kTBFNYy4kcTrUM2hSIt3ja8gNVAY=
goauthentik.io/api/v3 v3.2024123.7/go.mod h1:zz+mEZg8rY/7eEjkMGWJ2DnGqk+zqxuybGCGrR2O4Kw=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@ -595,8 +595,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=

View File

@ -29,4 +29,4 @@ func UserAgent() string {
return fmt.Sprintf("authentik@%s", FullVersion())
}
const VERSION = "2025.2.0"
const VERSION = "2024.12.3"

View File

@ -9,7 +9,7 @@
"version": "0.0.0",
"license": "MIT",
"devDependencies": {
"aws-cdk": "^2.179.0",
"aws-cdk": "^2.1000.2",
"cross-env": "^7.0.3"
},
"engines": {
@ -17,16 +17,16 @@
}
},
"node_modules/aws-cdk": {
"version": "2.179.0",
"resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.179.0.tgz",
"integrity": "sha512-aA2+8S2g4UBQHkUEt0mYd16VLt/ucR+QfyUJi34LDKRAhOCNDjPCZ4z9z/JEDyuni0BdzsYA55pnpDN9tMULpA==",
"version": "2.1000.2",
"resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1000.2.tgz",
"integrity": "sha512-QsXqJhGWjHNqP7etgE3sHOTiDBXItmSKdFKgsm1qPMBabCMyFfmWZnEeUxfZ4sMaIoxvLpr3sqoWSNeLuUk4sg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"cdk": "bin/cdk"
},
"engines": {
"node": ">= 14.15.0"
"node": ">= 16.0.0"
},
"optionalDependencies": {
"fsevents": "2.3.2"

View File

@ -10,7 +10,7 @@
"node": ">=20"
},
"devDependencies": {
"aws-cdk": "^2.179.0",
"aws-cdk": "^2.1000.2",
"cross-env": "^7.0.3"
}
}

View File

@ -26,7 +26,7 @@ Parameters:
Description: authentik Docker image
AuthentikVersion:
Type: String
Default: 2025.2.0
Default: 2024.12.3
Description: authentik Docker image tag
AuthentikServerCPU:
Type: Number

View File

@ -1,5 +1,5 @@
{
"name": "@goauthentik/authentik",
"version": "2025.2.0",
"version": "2024.12.3",
"private": true
}

390
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
[tool.poetry]
name = "authentik"
version = "2025.2.0"
version = "2024.12.3"
description = ""
authors = ["authentik Team <hello@goauthentik.io>"]
@ -92,6 +92,7 @@ dacite = "*"
deepmerge = "*"
defusedxml = "*"
django = "*"
django-celery-beat = "*"
django-countries = "*"
django-cte = "*"
django-filter = "*"

View File

@ -1,7 +1,7 @@
openapi: 3.0.3
info:
title: authentik
version: 2025.2.0
version: 2024.12.3
description: Making authentication simple.
contact:
email: hello@goauthentik.io

View File

@ -4,7 +4,7 @@ This package provides a generated API Client for [authentik](https://goauthentik
### Building
See https://docs.goauthentik.io/docs/developer-docs/making-schema-changes
See https://docs.goauthentik.io/docs/developer-docs/api/making-schema-changes#building-the-web-client
### Consuming

View File

@ -88,7 +88,11 @@ const baseArgs = {
treeShaking: true,
external: ["*.woff", "*.woff2"],
tsconfig: "./tsconfig.json",
loader: { ".css": "text", ".md": "text" },
loader: {
".css": "text",
".md": "text",
".mdx": "text",
},
define: definitions,
format: "esm",
logOverride: {

View File

@ -31,9 +31,9 @@ export class BoundPoliciesList extends Table<PolicyBinding> {
@property({ type: Array })
allowedTypes: PolicyBindingCheckTarget[] = [
PolicyBindingCheckTarget.policy,
PolicyBindingCheckTarget.group,
PolicyBindingCheckTarget.user,
PolicyBindingCheckTarget.policy,
];
@property({ type: Array })

View File

@ -58,9 +58,9 @@ export class PolicyBindingForm extends ModelForm<PolicyBinding, string> {
@property({ type: Array })
allowedTypes: PolicyBindingCheckTarget[] = [
PolicyBindingCheckTarget.policy,
PolicyBindingCheckTarget.group,
PolicyBindingCheckTarget.user,
PolicyBindingCheckTarget.policy,
];
@property({ type: Array })

View File

@ -4,7 +4,7 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
import { EVENT_REFRESH } from "@goauthentik/common/constants";
import renderDescriptionList from "@goauthentik/components/DescriptionList";
import "@goauthentik/components/events/ObjectChangelog";
import MDProviderOAuth2 from "@goauthentik/docs/add-secure-apps/providers/oauth2/index.md";
import MDProviderOAuth2 from "@goauthentik/docs/add-secure-apps/providers/oauth2/index.mdx";
import { AKElement } from "@goauthentik/elements/Base";
import "@goauthentik/elements/CodeMirror";
import "@goauthentik/elements/EmptyState";

View File

@ -13,7 +13,7 @@ import MDNginxStandalone from "@goauthentik/docs/add-secure-apps/providers/proxy
import MDTraefikCompose from "@goauthentik/docs/add-secure-apps/providers/proxy/_traefik_compose.md";
import MDTraefikIngress from "@goauthentik/docs/add-secure-apps/providers/proxy/_traefik_ingress.md";
import MDTraefikStandalone from "@goauthentik/docs/add-secure-apps/providers/proxy/_traefik_standalone.md";
import MDHeaderAuthentication from "@goauthentik/docs/add-secure-apps/providers/proxy/header_authentication.md";
import MDHeaderAuthentication from "@goauthentik/docs/add-secure-apps/providers/proxy/header_authentication.mdx";
import { AKElement } from "@goauthentik/elements/Base";
import "@goauthentik/elements/CodeMirror";
import "@goauthentik/elements/Markdown";

Binary file not shown.

Before

Width:  |  Height:  |  Size: 628 KiB

After

Width:  |  Height:  |  Size: 772 KiB

View File

@ -3,7 +3,7 @@ export const SUCCESS_CLASS = "pf-m-success";
export const ERROR_CLASS = "pf-m-danger";
export const PROGRESS_CLASS = "pf-m-in-progress";
export const CURRENT_CLASS = "pf-m-current";
export const VERSION = "2025.2.0";
export const VERSION = "2024.12.3";
export const TITLE_DEFAULT = "authentik";
export const ROUTE_SEPARATOR = ";";

View File

@ -193,9 +193,6 @@ export class InputPassword extends AKElement {
* the `autofocus` attribute isn't enough, due to timing within shadow doms and such.
*/
observeInputFocus(): void {
if (!this.grabFocus) {
return;
}
this.inputFocusIntervalID = setInterval(() => {
const input = this.inputRef.value;
@ -222,9 +219,7 @@ export class InputPassword extends AKElement {
}
disconnectedCallback() {
if (this.inputFocusIntervalID) {
clearInterval(this.inputFocusIntervalID);
}
clearInterval(this.inputFocusIntervalID);
super.disconnectedCallback();
@ -269,7 +264,7 @@ export class InputPassword extends AKElement {
toggleElement.setAttribute(
"aria-label",
masked ? Visibility.Reveal.label : Visibility.Mask.label,
msg(masked ? Visibility.Reveal.label : Visibility.Mask.label),
);
const iconElement = toggleElement.querySelector("i")!;
@ -285,7 +280,7 @@ export class InputPassword extends AKElement {
return html`<button
${ref(this.toggleVisibilityRef)}
aria-label=${label}
aria-label=${msg(label)}
@click=${this.togglePasswordVisibility}
class="pf-c-button pf-m-control"
type="button"

View File

@ -3,7 +3,7 @@ import "@goauthentik/elements/forms/FormElement";
import { BaseDeviceStage } from "@goauthentik/flow/stages/authenticator_validate/base";
import { PasswordManagerPrefill } from "@goauthentik/flow/stages/identification/IdentificationStage";
import { msg, str } from "@lit/localize";
import { msg } from "@lit/localize";
import { CSSResult, TemplateResult, css, html } from "lit";
import { customElement } from "lit/decorators.js";
@ -35,7 +35,7 @@ export class AuthenticatorValidateStageWebCode extends BaseDeviceStage<
switch (this.deviceChallenge?.deviceClass) {
case DeviceClassesEnum.Email: {
const email = this.deviceChallenge.challenge?.email;
return msg(str`A code has been sent to you via email${email ? ` ${email}` : ""}`);
return msg(`A code has been sent to you via email${email ? ` ${email}` : ""}`);
}
case DeviceClassesEnum.Sms:
return msg("A code has been sent to you via SMS.");

6
web/src/global.d.ts vendored
View File

@ -6,6 +6,12 @@ declare module "*.md" {
const filename: string;
}
declare module "*.mdx" {
const html: string;
const metadata: { [key: string]: string };
const filename: string;
}
declare namespace Intl {
class ListFormat {
constructor(locale: string, args: { [key: string]: string });

View File

@ -97,7 +97,9 @@ export class LibraryApplication extends AKElement {
return html``;
}
if (this.application?.launchUrl === "goauthentik.io://providers/rac/launch") {
return html`<div class="pf-c-card__header">
return html`<ak-library-rac-endpoint-launch .app=${this.application}>
</ak-library-rac-endpoint-launch>
<div class="pf-c-card__header">
<a
@click=${() => {
this.racEndpointLaunch?.onClick();
@ -118,9 +120,7 @@ export class LibraryApplication extends AKElement {
>
${this.application.name}
</a>
</div>
<ak-library-rac-endpoint-launch .app=${this.application}>
</ak-library-rac-endpoint-launch>`;
</div>`;
}
return html`<div class="pf-c-card__header">
<a

View File

@ -6,12 +6,12 @@ Applications, as defined in authentik, are used to configure and separate the au
When a user logs into authentik, they see a list of the applications for which authentik is configured to provide authentication and authorization (the applications that that they are authorized to use).
Applications are the "other half" of providers. They typically exist in a 1-to-1 relationship; each application needs a provider and every provider can be used with one application. Applications can, however, use specific, additional providers to augment the functionality of the main provider. For more information, see [Backchannel providers](./manage_apps.md#backchannel-providers).
Applications are the "other half" of providers. They typically exist in a 1-to-1 relationship; each application needs a provider and every provider can be used with one application. Applications can, however, use specific, additional providers to augment the functionality of the main provider. For more information, see [Backchannel providers](./manage_apps.mdx#backchannel-providers).
Furthermore, the [RAC (Remote Access Control)](../providers/rac/index.md) feature uses a single application and a single provider, but multiple "endpoints". An endpoint defines each remote machine.
:::info
For information about creating and managing applications, refer to [Manage applications](./manage_apps.md).
For information about creating and managing applications, refer to [Manage applications](./manage_apps.mdx).
:::
## Appearance

View File

@ -10,7 +10,15 @@ Learn how to add new applications from our video or follow the instructions belo
### Video
<iframe width="560" height="315" src="https://www.youtube.com/embed/broUAWrIWDI;start=22" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/broUAWrIWDI;start=22"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen
></iframe>
### Instructions
@ -45,8 +53,12 @@ When multiple policies/groups/users are attached, you can configure the _Policy
## Application Entitlements
<span class="badge badge--preview">Preview</span>
<span class="badge badge--version">authentik 2024.12+</span>
<p className="badge-group">
:ak-version[2024.12]
:ak-preview
</p>
Application entitlements can be used through authentik to manage authorization within an application (what areas of the app users or groups can access). Entitlements are scoped to a single application and can be bound to multiple users and/or groups (binding policies is not currently supported), giving them access to the entitlement. An application can either check for the name of the entitlement (via the `entitlements` scope), or via attributes stored in entitlements.

View File

@ -24,7 +24,7 @@ A _policy binding_ connects a specific policy to a flow or to a stage. With the
You can also bind groups and users to another component (a policy, a stage, a flow, etc.). For example, you can create a binding for a specific group, and then [bind that to a stage binding](../stages/index.md#bind-users-and-groups-to-a-flows-stage-binding), with the result that everyone in that group now will see that stage (and any policies bound to that stage) as part of their flow. Or more specifically, and going one step deeper, you can also _bind a binding to a binding_.
Bindings are also used for [Application Entitlements](../../applications/manage_apps.md#application-entitlements), where you can bind specific users or groups to an application as a way to manage who has access to the application.
Bindings are also used for [Application Entitlements](../../applications/manage_apps.mdx#application-entitlements), where you can bind specific users or groups to an application as a way to manage who has access to the application.
It's important to remember that bindings are instantiated objects themselves, and conceptually can be considered as a "connector" between two components. This is why you might read about "binding a binding", because technically, a binding is "spliced" into another binding, in order to intercept and enforce the criteria defined in the second binding.

View File

@ -8,6 +8,6 @@ For instructions to create a binding, refer to the documentation for the specifi
- [Bind a stage to a flow](../stages/index.md#bind-a-stage-to-a-flow)
- [Bind a policy to a flow or stage](../../../customize/policies/working_with_policies#bind-a-policy-to-a-flow-or-stage)
- [Bind users or groups to a specific application with an Application Entitlement](../../applications/manage_apps.md#application-entitlements)
- [Bind a policy to a specific application when you create a new app using the Wizard](../../applications/manage_apps.md#instructions)
- [Bind users or groups to a specific application with an Application Entitlement](../../applications/manage_apps.mdx#application-entitlements)
- [Bind a policy to a specific application when you create a new app using the Wizard](../../applications/manage_apps.mdx#instructions)
- [Bind users and groups to a stage binding, to define whether or not that stage is shown](../stages/index.md#bind-users-and-groups-to-a-flows-stage-binding)

View File

@ -24,11 +24,11 @@ Keys prefixed with `goauthentik.io` are used internally by authentik and are sub
### Common keys
#### `pending_user` ([User object](../../../../users-sources/user/user_ref.md#object-properties))
#### `pending_user` ([User object](../../../../users-sources/user/user_ref.mdx#object-properties))
`pending_user` is used by multiple stages. In the context of most flow executions, it represents the data of the user that is executing the flow. This value is not set automatically, it is set via the [Identification stage](../../stages/identification/index.md).
`pending_user` is used by multiple stages. In the context of most flow executions, it represents the data of the user that is executing the flow. This value is not set automatically, it is set via the [Identification stage](../../stages/identification/index.mdx).
Stages that require a user, such as the [Password stage](../../stages/password/index.md), the [Authenticator validation stage](../../stages/authenticator_validate/index.md) and others will use this value if it is set, and fallback to the request's users when possible.
Stages that require a user, such as the [Password stage](../../stages/password/index.md), the [Authenticator validation stage](../../stages/authenticator_validate/index.mdx) and others will use this value if it is set, and fallback to the request's users when possible.
#### `prompt_data` (Dictionary)
@ -62,7 +62,7 @@ When an unauthenticated user attempts to access a secured resource, they are red
When a user authenticates/enrolls via an external source, this will be set to the source they are using.
#### `outpost` (dictionary) <span class="badge badge--version">authentik 2024.10+</span>
#### `outpost` (dictionary):ak-version[2024.10]
When a flow is executed by an Outpost (for example the [LDAP](../../../providers/ldap/index.md) or [RADIUS](../../../providers/radius/index.mdx)), this will be set to a dictionary containing the Outpost instance under the key `"instance"`.
@ -76,7 +76,7 @@ This key is set to `True` when the flow is executed from an "SSO" context. For e
This key is set when a flow execution is continued from a token. This happens for example when an [Email stage](../../stages/email/index.mdx) is used and the user clicks on the link within the email. The token object contains the key that was used to restore the flow execution.
#### `is_redirected` (Flow object) <span class="badge badge--version">authentik 2024.12+</span>
#### `is_redirected` (Flow object):ak-version[2024.12]
This key is set when the current flow was reached through a [Redirect stage](../../stages/redirect/index.md) in Flow mode.
@ -98,7 +98,7 @@ URL that the form will be submitted to.
Key-value pairs of the data that is included in the form and will be submitted to `url`.
#### Captcha stage <span class="badge badge--version">authentik 2024.6+</span>
#### Captcha stage:ak-version[2024.6]
##### `captcha` (dictionary)
@ -118,7 +118,7 @@ An optional list of all permissions that will be given to the application by gra
#### Deny stage
##### `deny_message` (string) <span class="badge badge--version">authentik 2023.10+</span>
##### `deny_message` (string)
Optionally overwrite the deny message shown, has a higher priority than the message configured in the stage.
@ -134,7 +134,7 @@ If set, this must be a list of group objects and not group names.
Path the `pending_user` will be written to. If not set in the flow, falls back to the value set in the user_write stage, and otherwise to the `users` path.
##### `user_type` (string) <span class="badge badge--version">authentik 2023.10+</span>
##### `user_type` (string)
Type the `pending_user` will be created as. Must be one of `internal`, `external` or `service_account`.
@ -146,7 +146,7 @@ Set by the [Password stage](../../stages/password/index.md) after successfully a
##### `auth_method` (string)
Set by the [Password stage](../../stages/password/index.md), the [Authenticator validation stage](../../stages/authenticator_validate/index.md), the [OAuth2 Provider](../../../providers/oauth2/index.md), and the API authentication depending on which method was used to authenticate.
Set by the [Password stage](../../stages/password/index.md), the [Authenticator validation stage](../../stages/authenticator_validate/index.mdx), the [OAuth2 Provider](../../../providers/oauth2/index.mdx), and the API authentication depending on which method was used to authenticate.
Possible options:
@ -155,7 +155,7 @@ Possible options:
- `ldap` (Authenticated via LDAP bind from an LDAP source)
- `auth_mfa` (Authentication via MFA device without password)
- `auth_webauthn_pwl` (Passwordless authentication via WebAuthn)
- `jwt` ([M2M](../../../providers/oauth2/client_credentials.md) authentication via an existing JWT)
- `jwt` ([M2M](../../../providers/oauth2/client_credentials.mdx) authentication via an existing JWT)
##### `auth_method_args` (dictionary)
@ -198,7 +198,7 @@ If _Show matched user_ is disabled, this key will be set to the user identifier
#### Redirect stage
##### `redirect_stage_target` (string) <span class="badge badge--version">authentik 2024.12+</span>
##### `redirect_stage_target` (string):ak-version[2024.12]
[Set this key](../../../../customize/policies/expression/managing_flow_context_keys.md) in an Expression Policy to override [Redirect stage](../../stages/redirect/index.md) to force it to redirect to a certain URL or flow. This is useful when a flow requires that the redirection target be decided dynamically.

View File

@ -2,7 +2,7 @@
title: Example policy snippets for flows
---
### Redirect current flow to another URL <span class="badge badge--version">authentik 2022.7+</span>
### Redirect current flow to another URL
```python
plan = request.context.get("flow_plan")

View File

@ -6,6 +6,6 @@ The headless flow executor is used by clients that don't have access to the web
The following stages are supported:
- [**Identification stage**](../../stages/identification/index.md)
- [**Identification stage**](../../stages/identification/index.mdx)
- [**Password stage**](../../stages/password/index.md)
- [**Authenticator Validation Stage**](../../stages/authenticator_validate/index.md)
- [**Authenticator Validation Stage**](../../stages/authenticator_validate/index.mdx)

View File

@ -1,9 +1,8 @@
---
title: Simplified flow executor
authentik_version: "2024.6.1"
---
<span class="badge badge--version">authentik 2024.6.1+</span>
A simplified web-based flow executor that authentik automatically uses for older browsers that do not support modern web technologies.
Currently this flow executor is automatically used for the following browsers:
@ -13,14 +12,14 @@ Currently this flow executor is automatically used for the following browsers:
The following stages are supported:
- [**Identification stage**](../../stages/identification/index.md)
- [**Identification stage**](../../stages/identification/index.mdx)
:::info
Only user identifier and user identifier + password stage configurations are supported; sources and passwordless configurations are not supported.
:::
- [**Password stage**](../../stages/password/index.md)
- [**Authenticator Validation Stage**](../../stages/authenticator_validate/index.md)
- [**Authenticator Validation Stage**](../../stages/authenticator_validate/index.mdx)
Compared to the [default flow executor](./if-flow.md), this flow executor does _not_ support the following features:

View File

@ -2,10 +2,6 @@
title: User settings
---
<span class="badge badge--version">authentik 2023.3+</span>
---
The user interface (/if/user/) uses a specialized flow executor to allow individual users to customize their profile. A user's profile consists of key/value fields, so this executor only supports Prompt or User Write 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 its execution, be awre that configuring this executor to use any stage type other than Prompt or User Write will automatically trigger a redirect to the standard executor.

View File

@ -6,7 +6,7 @@
- **Invalidation**: designates a default flow to be used to invalidate a session. Use `default-invalidation-flow` for invalidation from authentik itself, or use `default-provider-invalidation-flow` to invalidate when the session of an application ends. When you use the `default-invalidation-flow` as a global invalidation flow, it should contain a [**User Logout**](../../stages/user_logout.md) stage. When you use the `default-provider-invalidation-flow` (supported with OIDC, SAML, Proxy, and RAC providers), you can configure this default flow to present users log-off options such as "log out of the app but remain logged in to authentik" or "return to the **My Applications** page", or "log out completely". (Alternatively, you can create a custom invalidation flow, with a branded background image.)
- **Recovery**: designates a flow for recovery. This flow normally contains an [**Identification**](../../stages/identification/index.md) stage to find the user. It can also contain any amount of verification stages, such as [**Email**](../../stages/email/index.mdx) or [**CAPTCHA**](../../stages/captcha/index.md). Afterwards, use the [**Prompt**](../../stages/prompt/index.md) stage to ask the user for a new password and the [**User Write**](../../stages/user_write.md) stage to update the password.
- **Recovery**: designates a flow for recovery. This flow normally contains an [**Identification**](../../stages/identification/index.mdx) stage to find the user. It can also contain any amount of verification stages, such as [**Email**](../../stages/email/index.mdx) or [**CAPTCHA**](../../stages/captcha/index.md). Afterwards, use the [**Prompt**](../../stages/prompt/index.md) stage to ask the user for a new password and the [**User Write**](../../stages/user_write.md) stage to update the password.
- **Stage configuration**: designates a flow for general setup. This designation doesn't have any constraints in what you can do. For example, by default this designation is used to configure authenticators, like change a password and set up TOTP.

View File

@ -20,7 +20,7 @@ When these stages are successfully completed, authentik logs in the user.
By default, policies are evaluated dynamically, right before the stage (to which a policy is bound) is presented to the user. This flexibility allows the login process to continue, change, or stop, based on the success or failure of each policy.
This default behaviour can be altered by enabling the **Evaluate when flow is planned** option on the stage binding. With this setting a _flow plan_ containing all stages is generated upon flow execution. This means that all attached policies are evaluated upon execution. For more information about flow plans, read our [flow context documentation](./context/index.md).
This default behaviour can be altered by enabling the **Evaluate when flow is planned** option on the stage binding. With this setting a _flow plan_ containing all stages is generated upon flow execution. This means that all attached policies are evaluated upon execution. For more information about flow plans, read our [flow context documentation](./context/index.mdx).
## Permissions

View File

@ -2,7 +2,7 @@
title: Flow Inspector
---
The flow inspector, introduced in 2021.10, allows administrators to visually determine how custom flows work, inspect the current [flow context](./context/index.md), and investigate issues.
The flow inspector, introduced in 2021.10, allows administrators to visually determine how custom flows work, inspect the current [flow context](./context/index.mdx), and investigate issues.
As shown in the screenshot below, the flow inspector displays next to the selected flow (in this case, "Change Password"), with [information](#flow-inspector-details) about that specific flow and flow context.

View File

@ -10,7 +10,7 @@ Copy all of the integration key, secret key and API hostname, and paste them in
Devices created reference the stage they were created with, since the API credentials are needed to authenticate. This also means when the stage is deleted, all devices are removed.
## Importing users <span class="badge badge--version">authentik 2022.9+</span>
## Importing users
:::info
Due to the way the Duo API works, authentik can only automatically import existing Duo users when a Duo MFA or higher license is active.
@ -20,7 +20,7 @@ To import a device, open the Stages list in the authentik Admin interface. On th
The Duo username can be found by navigating to your Duo Admin dashboard and selecting _Users_ in the sidebar. Optionally if you have multiple users with the same username, you can click on a User and copy their ID from the URL, and use that to import the device.
### Older versions <span class="badge badge--version">authentik 2021.9.1+</span>
### Older versions
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:

View File

@ -1,11 +1,8 @@
---
title: Endpoint Authenticator Google Device Trust Connector Stage
---
<span class="badge badge--primary">Enterprise</span>
<span class="badge badge--preview">Preview</span>
<span class="badge badge--version">authentik 2024.10+</span>
authentik_version: "2024.10"
authentik_preview: true
authentik_enterprise: true
---
With this stage, authentik can validate users' Chrome browsers and ensure that users' devices are compliant and up-to-date.
@ -18,10 +15,11 @@ This stage only works with Google Chrome, as it relies on the [Chrome Verified A
The main steps to set up your Google workspace are as follows:
1. [Create your Google Cloud Project](#create-a-google-cloud-project)
2. [Create a service account](#create-a-service-account)
3. [Set credentials for the service account](#set-credentials-for-the-service-account)
4. [Define access and scope in the Admin Console](#set-credentials-for-the-service-account)
- [Configuration](#configuration)
- [Create a Google cloud project](#create-a-google-cloud-project)
- [Create a service account](#create-a-service-account)
- [Set credentials for the service account](#set-credentials-for-the-service-account)
- [Create the stage](#create-the-stage)
For detailed instructions, refer to Google documentation.
@ -76,4 +74,4 @@ For detailed instructions, refer to Google documentation.
4. Click **Finish**.
After creating the stage, it can be used in any flow. Compared to other Authenticator stages, this stage does not require enrollment. Instead of adding an [Authenticator Validation Stage](../authenticator_validate/index.md), this stage only verifies the users' browser.
After creating the stage, it can be used in any flow. Compared to other Authenticator stages, this stage does not require enrollment. Instead of adding an [Authenticator Validation Stage](../authenticator_validate/index.mdx), this stage only verifies the users' browser.

View File

@ -46,9 +46,9 @@ return {
}
```
## Verify only <span class="badge badge--version">authentik 2022.6+</span>
## Verify only
To only verify the validity of a users' phone number, without saving it in an easily accessible way, you can enable this option. Phone numbers from devices enrolled through this stage will only have their hashed phone number saved. These devices can also not be used with the [Authenticator validation](../authenticator_validate/index.md) stage.
To only verify the validity of a users' phone number, without saving it in an easily accessible way, you can enable this option. Phone numbers from devices enrolled through this stage will only have their hashed phone number saved. These devices can also not be used with the [Authenticator validation](../authenticator_validate/index.mdx) stage.
## Limiting phone numbers

View File

@ -4,11 +4,11 @@ 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:
- [Duo authenticator stage](../authenticator_duo/index.md)
- [SMS authenticator stage](../authenticator_sms/index.md)
- [Duo authenticator stage](../authenticator_duo/index.mdx)
- [SMS authenticator stage](../authenticator_sms/index.mdx)
- [Static authenticator stage](../authenticator_static/index.md)
- [TOTP authenticator stage](../authenticator_totp/index.md)
- [WebAuthn authenticator stage](../authenticator_webauthn/index.md)
- [WebAuthn authenticator stage](../authenticator_webauthn/index.mdx)
You can select which type of device classes are allowed.
@ -23,11 +23,11 @@ Keep in mind that when using Code-based devices (TOTP, Static and SMS), values l
### Options
#### Less-frequent validation <span class="badge badge--version">authentik 2022.5.1+</span>
#### Less-frequent validation
You can configure this stage to only ask for MFA validation if the user hasn't authenticated themselves within a defined time period. To configure this, set _Last validation threshold_ to any non-zero value. Any of the users devices within the selected classes are checked.
#### Passwordless authentication <span class="badge badge--version">authentik 2021.12.4+</span>
#### Passwordless authentication
:::caution
Firefox has some known issues regarding TouchID (see https://bugzilla.mozilla.org/show_bug.cgi?id=1536482)
@ -68,7 +68,7 @@ Logins which used Passwordless authentication have the _auth_method_ context var
}
```
#### WebAuthn Device type restrictions <span class="badge badge--version">authentik 2024.4+</span>
#### WebAuthn Device type restrictions:ak-version[2024.4]
Optionally restrict which WebAuthn device types can be used to authenticate.

View File

@ -12,13 +12,13 @@ Configure if authentik should require, prefer or discourage user verification fo
#### Resident key requirement
Configure if the created authenticator is stored in the encrypted memory on the device or in persistent memory. When configuring [passwordless login](../identification/index.md#passwordless-flow), this should be set to either _Preferred_ or _Required_, otherwise the authenticator cannot be used for passwordless authentication.
Configure if the created authenticator is stored in the encrypted memory on the device or in persistent memory. When configuring [passwordless login](../identification/index.mdx#passwordless-flow), this should be set to either _Preferred_ or _Required_, otherwise the authenticator cannot be used for passwordless authentication.
#### Authenticator Attachment
Configure if authentik will require either a removable device (like a YubiKey, Google Titan, etc) or a non-removable device (like Windows Hello, TouchID or password managers), or not send a requirement.
#### Device type restrictions <span class="badge badge--version">authentik 2024.4+</span>
#### Device type restrictions:ak-version[2024.4]
Optionally restrict the types of devices allowed to be enrolled. This option can be used to ensure users are only able to enroll FIPS-compliant devices for example.

View File

@ -30,13 +30,13 @@ To run a CAPTCHA process in the background while the user is entering their iden
These fields specify if and which flows are linked on the form. The enrollment flow is linked as `Need an account? Sign up.`, and the recovery flow is linked as `Forgot username or password?`.
## Pretend user exists <span class="badge badge--version">authentik 2024.2+</span>
## Pretend user exists:ak-version[2024.2]
When enabled, any user identifier will be accepted as valid (as long as they match the correct format, i.e. when [User fields](#user-fields) is set to only allow Emails, then the identifier still needs to be an Email). The stage will succeed and the flow will continue to the next stage. Stages like the [Password stage](../password/index.md) and [Email stage](../email/index.mdx) are aware of this "pretend" user and will behave the same as if the user would exist.
## Source settings
Some sources (like the [OAuth Source](../../../../users-sources/sources/protocols/oauth/index.md) and [SAML Source](../../../../users-sources/sources/protocols/saml/index.md)) require user interaction. To make these sources available to users, they can be selected in the Identification stage settings, which will show them below the selected [user field](#user-fields).
Some sources (like the [OAuth Source](../../../../users-sources/sources/protocols/oauth/index.mdx) and [SAML Source](../../../../users-sources/sources/protocols/saml/index.md)) require user interaction. To make these sources available to users, they can be selected in the Identification stage settings, which will show them below the selected [user field](#user-fields).
By default, sources are only shown with their icon, which can be changed with the _Show sources' labels_ option.
@ -50,7 +50,7 @@ Starting with authentik 2023.5, when no user fields are selected and only one so
### Passwordless flow
See [Passwordless authentication](../authenticator_validate/index.md#passwordless-authentication-authentik-2021124).
See [Passwordless authentication](../authenticator_validate/index.mdx#passwordless-authentication).
### Enrollment flow

View File

@ -6,7 +6,7 @@ This is a generic password prompt which authenticates the current `pending_user`
## Passwordless login
There are two different ways to configure passwordless authentication; you can follow the instructions [here](../authenticator_validate/index.md#passwordless-authentication-authentik-2021124) to allow users to directly authenticate with their authenticator (only supported for WebAuthn devices), or dynamically skip the password stage depending on the users device, which is documented here.
There are two different ways to configure passwordless authentication; you can follow the instructions [here](../authenticator_validate/index.mdx#passwordless-authentication) to allow users to directly authenticate with their authenticator (only supported for WebAuthn devices), or dynamically skip the password stage depending on the users device, which is documented here.
Depending on what kind of device you want to require the user to have:

View File

@ -1,9 +1,6 @@
---
title: Redirect stage
---
<span class="badge badge--version">authentik 2024.12+</span>
authentik_version: "2024.12"
---
This stage's main purpose is to redirect the user to a new Flow while keeping flow context. For convenience, it can also redirect the user to a static URL.
@ -16,6 +13,6 @@ When the user reaches this stage, they are redirected to a static URL.
### Flow mode
When the user reaches this stage, they are redirected to a specified flow, retaining all [flow context](../../flow/context).
When the user reaches this stage, they are redirected to a specified flow, retaining all [flow context](../../flow/context/index.mdx).
Optionally, untoggle the "Keep flow context" switch. If this is untoggled, all flow context is cleared with the exception of the [is_redirected](../../flow/context#is_redirected-flow-object-authentik-202412) key.
Optionally, untoggle the "Keep flow context" switch. If this is untoggled, all flow context is cleared with the exception of the [is_redirected](../../flow/context#is_redirected-flow-object) key.

View File

@ -1,13 +1,10 @@
---
title: Source stage
authentik_version: "2024.4"
authentik_enterprise: true
---
<span class="badge badge--primary">Enterprise</span>
<span class="badge badge--version">authentik 2024.4+</span>
---
The source stage injects an [OAuth](../../../../users-sources/sources/protocols/oauth/index.md) or [SAML](../../../../users-sources/sources/protocols/saml/index.md) Source into the flow execution. This allows for additional user verification, or to dynamically access different sources for different user identifiers (username, email address, etc).
The source stage injects an [OAuth](../../../../users-sources/sources/protocols/oauth/index.mdx) or [SAML](../../../../users-sources/sources/protocols/saml/index.md) Source into the flow execution. This allows for additional user verification, or to dynamically access different sources for different user identifiers (username, email address, etc).
```mermaid
sequenceDiagram
@ -44,13 +41,13 @@ This stage can be used to leverage an external OAuth/SAML identity provider.
For example, you can authenticate users by routing them through a custom device-health solution.
Another use case is to route users to authenticate with your legacy (Okta, etc) IdP and then use the returned identity and attributes within authentik as part of an authorization flow, for example as part of an IdP migration. For authentication/enrollment this is also possible with an [OAuth](../../../../users-sources/sources/protocols/oauth/index.md)/[SAML](../../../../users-sources/sources/protocols/saml/index.md) source by itself.
Another use case is to route users to authenticate with your legacy (Okta, etc) IdP and then use the returned identity and attributes within authentik as part of an authorization flow, for example as part of an IdP migration. For authentication/enrollment this is also possible with an [OAuth](../../../../users-sources/sources/protocols/oauth/index.mdx)/[SAML](../../../../users-sources/sources/protocols/saml/index.md) source by itself.
### Options
#### Source
The source the user is redirected to. Must be a web-based source, such as [OAuth](../../../../users-sources/sources/protocols/oauth/index.md) or [SAML](../../../../users-sources/sources/protocols/saml/index.md). Sources like [LDAP](../../../../users-sources/sources/protocols/ldap/index.md) are _not_ compatible.
The source the user is redirected to. Must be a web-based source, such as [OAuth](../../../../users-sources/sources/protocols/oauth/index.mdx) or [SAML](../../../../users-sources/sources/protocols/saml/index.md). Sources like [LDAP](../../../../users-sources/sources/protocols/ldap/index.md) are _not_ compatible.
#### Resume timeout

View File

@ -1,9 +1,6 @@
---
title: Add an Entra ID provider
---
<span class="badge badge--primary">Enterprise</span>
authentik_enterprise: true
---
For more information about using an Entra ID provider, see the [Overview](./index.md) documentation.

View File

@ -1,9 +1,6 @@
---
title: Microsoft Entra ID provider
---
<span class="badge badge--primary">Enterprise</span>
authentik_enterprise: true
---
With the Microsoft Entra ID provider, authentik serves as the single source of truth for all users and groups. Configuring Entra ID as a provider allows for auto-discovery of user and group accounts, on-going synchronization of user data such as email address, name, and status, and integrated data mapping of field names and values.

View File

@ -1,9 +1,6 @@
---
title: Configure Entra ID
---
<span class="badge badge--primary">Enterprise</span>
authentik_enterprise: true
---
The configuration of your Microsoft Entra ID environment must be completed before you [add the new provider](./add-entra-provider.md) in authentik.

View File

@ -1,9 +1,6 @@
---
title: Create a Google Workspace provider
---
<span class="badge badge--primary">Enterprise</span>
authentik_enterprise: true
---
For more information about using a Google Workspace provider, see the [Overview](./index.md) documentation.

View File

@ -1,9 +1,6 @@
---
title: Google Workspace provider
---
<span class="badge badge--primary">Enterprise</span>
authentik_enterprise: true
---
With the Google Workspace provider, authentik serves as the single source of truth for all users and groups, when using Google products like Gmail.

View File

@ -1,9 +1,6 @@
---
title: Configure Google Workspace
---
<span class="badge badge--primary">Enterprise</span>
authentik_enterprise: true
---
The configuration and set up of your Google Workspace must be completed before you [add the new provider](./add-gws-provider.md) in authentik.

View File

@ -9,9 +9,9 @@ A Provider is an authentication method, a service that is used by authentik to a
Providers are the "other half" of [applications](../applications/index.md). They typically exist in a 1-to-1 relationship; each application needs a provider and every provider can be used with one application.
Applications can use additional providers to augment the functionality of the main provider. For more information, see [Backchannel providers](../applications/manage_apps.md#backchannel-providers).
Applications can use additional providers to augment the functionality of the main provider. For more information, see [Backchannel providers](../applications/manage_apps.mdx#backchannel-providers).
You can create a new provider in the Admin interface, or you can use the [Application wizard](../applications/manage_apps.md#instructions) to create a new application and its provider at the same time.
You can create a new provider in the Admin interface, or you can use the [Application wizard](../applications/manage_apps.mdx#instructions) to create a new application and its provider at the same time.
When you create certain types of providers, you need to select specific [flows](../flows-stages/flow/index.md) to apply to users who access authentik via the provider. To learn more, refer to our [default flow documentation](../flows-stages/flow/examples/default_flows.md).

View File

@ -78,9 +78,9 @@ All bind modes rely on flows.
The following stages are supported:
- [Identification](../../flows-stages/stages/identification/index.md)
- [Identification](../../flows-stages/stages/identification/index.mdx)
- [Password](../../flows-stages/stages/password/index.md)
- [Authenticator validation](../../flows-stages/stages/authenticator_validate/index.md)
- [Authenticator validation](../../flows-stages/stages/authenticator_validate/index.mdx)
Note: Authenticator validation currently only supports DUO, TOTP and static authenticators.

View File

@ -30,7 +30,7 @@ In addition to that, with authentik 2024.4 it is also possible to pass the confi
### JWT-authentication
#### Externally issued JWTs <span class="badge badge--version">authentik 2022.4+</span>
#### Externally issued JWTs
You can authenticate and get a token using an existing 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.
@ -59,7 +59,7 @@ To dynamically limit access based on the claims of the tokens, you can use _[Exp
return request.context["oauth_jwt"]["iss"] == "https://my.issuer"
```
#### authentik-issued JWTs <span class="badge badge--version">authentik 2024.12+</span>
#### authentik-issued JWTs:ak-version[2024.12]
To allow federation between providers, modify the provider settings of the application (whose token will be used for authentication) to select the provider of the application to which you want to federate.

View File

@ -112,7 +112,7 @@ The Hybrid Flow is an OpenID Connect flow that incorporates traits of both the I
The client credentials flow and grant types are typically implemented for server-to-server scenarios, when code in a web application invokes a web API.
For more information, see [Machine-to-machine authentication](./client_credentials.md).
For more information, see [Machine-to-machine authentication](./client_credentials.mdx).
### 3. Device code
@ -176,6 +176,6 @@ When a _Signing Key_ is selected in the provider, the JWT will be signed asymmet
When no _Signing Key_ is selected, the JWT will be signed symmetrically with the _Client secret_ of the provider, which can be seen in the provider settings.
### Encryption <span class="badge badge--version">authentik 2024.10+</span>
### Encryption:ak-version[2024.10]
authentik can also encrypt JWTs (turning them into JWEs) it issues by selecting an _Encryption Key_ in the provider. When selected, all JWTs will be encrypted symmetrically using the selected certificate. authentik uses the `RSA-OAEP-256` algorithm with the `A256CBC-HS512` encryption method.

View File

@ -6,7 +6,7 @@ The property mapping should return a value that is expected by the provider. Sup
## Available Functions
import Functions from "../../../expressions/_functions.md";
import Functions from "../../../expressions/_functions.mdx";
<Functions />

View File

@ -1,6 +1,6 @@
Use the following configuration:
```
```apacheconf
app.company {
# directive execution order is only as stated if enclosed with route.
route {
@ -26,7 +26,7 @@ app.company {
If you're trying to proxy to an upstream over HTTPS, you need to set the `Host` header to the value they expect for it to work correctly.
```
```conf
reverse_proxy /outpost.goauthentik.io/* https://outpost.company {
header_up Host {http.reverse_proxy.upstream.hostport}
}

View File

@ -1,4 +1,4 @@
```
```nginx
# Increase buffer size for large headers
# This is needed only if you get 'upstream sent too big header while reading response
# header from upstream' error when trying to access an application protected by goauthentik

View File

@ -1,4 +1,4 @@
```
```nginx
# Upgrade WebSocket if requested, otherwise use keepalive
map $http_upgrade $connection_upgrade_keepalive {
default upgrade;

View File

@ -25,9 +25,9 @@ By default, when _Intercept header authentication_ is enabled, authentik will in
If the proxied application requires usage of the "Authorization" header, the setting should be disabled. When this setting is disabled, authentik will still attempt to interpret the "Authorization" header, and fall back to the default behaviour if it can't.
### Receiving HTTP Basic authentication <span class="badge badge--version">authentik 2023.1+</span>
### Receiving HTTP Basic authentication
Proxy providers can receive HTTP basic authentication credentials. The password is expected to be an _App password_, as the credentials are used internally with the [OAuth2 machine-to-machine authentication flow](../oauth2/client_credentials.md).
Proxy providers can receive HTTP basic authentication credentials. The password is expected to be an _App password_, as the credentials are used internally with the [OAuth2 machine-to-machine authentication flow](../oauth2/client_credentials.mdx).
Access control is done with the policies bound to the application being accessed.
@ -39,9 +39,9 @@ It is **strongly** recommended that the client sending requests with HTTP-Basic
Starting with authentik 2023.2, logging in with the reserved username `goauthentik.io/token` will behave as if a bearer token was used. All the same options as below apply. This is to allow token-based authentication for applications which might only support basic authentication.
### Receiving HTTP Bearer authentication <span class="badge badge--version">authentik 2023.1+</span>
### Receiving HTTP Bearer authentication
Proxy providers can receive HTTP bearer authentication credentials. The token is expected to be a JWT token issued for the proxy provider. This is described [here](../oauth2/client_credentials.md), using the _client_id_ value shown in the admin interface. Both static and JWT authentication methods are supported.
Proxy providers can receive HTTP bearer authentication credentials. The token is expected to be a JWT token issued for the proxy provider. This is described [here](../oauth2/client_credentials.mdx), using the _client_id_ value shown in the admin interface. Both static and JWT authentication methods are supported.
Access control is done with the policies bound to the application being accessed.

View File

@ -1,17 +1,14 @@
---
title: Caddy
hide_title: true
---
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
# Caddy <span class="badge badge--version">authentik 2022.8+</span>
import Placeholders from "./__placeholders.md";
import CaddyStandalone from "./_caddy_standalone.md";
The configuration template shown below apply to both single-application and domain-level forward auth.
import Placeholders from "./__placeholders.md";
<Placeholders />
<Tabs
@ -21,8 +18,6 @@ import Placeholders from "./__placeholders.md";
]}>
<TabItem value="caddy-standalone">
import CaddyStandalone from "./_caddy_standalone.md";
<CaddyStandalone />
</TabItem>

View File

@ -1,12 +1,13 @@
---
title: Envoy
hide_title: true
---
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import Placeholders from "./__placeholders.md";
import EnvoyIstio from "./_envoy_istio.md";
# Envoy <span class="badge badge--version">authentik 2022.6+</span>
# Envoy
The configuration template shown below apply to both single-application and domain-level forward auth.
@ -14,20 +15,18 @@ The configuration template shown below apply to both single-application and doma
If you are using Istio and Kubernetes, use the port number that is exposed for your cluster.
:::
import Placeholders from "./__placeholders.md";
<Placeholders />
<Tabs
defaultValue="envoy-istio"
values={[
{label: 'Envoy (Istio)', value: 'envoy-istio'},
]}>
<TabItem value="envoy-istio">
import EnvoyIstio from "./_envoy_istio.md";
<EnvoyIstio />
</TabItem>
defaultValue="envoy-istio"
values={[
{
label: "Envoy (Istio)",
value: "envoy-istio",
},
]}
>
<TabItem value="envoy-istio">
<EnvoyIstio />
</TabItem>
</Tabs>

View File

@ -26,7 +26,7 @@ The first step is to create the RAC app and provider.
2. In the Admin interface, navigate to **Applications -> Applications**.
3. Click **Create with Wizard**. Follow the [instructions](../../applications/manage_apps.md#instructions) to create your RAC application and provider.
3. Click **Create with Wizard**. Follow the [instructions](../../applications/manage_apps.mdx#instructions) to create your RAC application and provider.
### Step 2. Create RAC property mapping

View File

@ -1,9 +1,6 @@
---
title: Remote Access Control (RAC) Provider
---
<span class="badge badge--primary">Enterprise</span>
authentik_enterprise: true
---
:::info

View File

@ -18,9 +18,9 @@ Authentication requests against the Radius Server use a flow in the background.
The following stages are supported:
- [Identification](../../flows-stages/stages/identification/index.md)
- [Identification](../../flows-stages/stages/identification/index.mdx)
- [Password](../../flows-stages/stages/password/index.md)
- [Authenticator validation](../../flows-stages/stages/authenticator_validate/index.md)
- [Authenticator validation](../../flows-stages/stages/authenticator_validate/index.mdx)
Note: Authenticator validation currently only supports DUO, TOTP, and static authenticators.

View File

@ -2,7 +2,7 @@
title: Export
---
## Global export <span class="badge badge--version">authentik 2022.8.2+</span>
## Global export
To migrate existing configurations to blueprints, run `ak export_blueprint` within any authentik Worker container. This will output a blueprint for most currently created objects. Some objects will not be exported as they might have dependencies on other things.

View File

@ -2,10 +2,6 @@
title: Blueprints
---
<span class="badge badge--version">authentik 2022.8+</span>
---
Blueprints offer a new way to template, automate and distribute authentik configuration. Blueprints can be used to automatically configure instances, manage config as code without any external tools, and to distribute application configs.
## Types
@ -58,7 +54,7 @@ To push a blueprint to an OCI-compatible registry, [ORAS](https://oras.land/) ca
oras push ghcr.io/<username>/blueprint/<blueprint name>:latest <yaml file>:application/vnd.goauthentik.blueprint.v1+yaml
```
## Storage - Internal <span class="badge badge--version">authentik 2023.1+</span>
## Storage - Internal
Blueprints can be stored in authentik's database, which allows blueprints to be managed via external configuration management tools like Terraform.

View File

@ -4,7 +4,7 @@ Some models behave differently and allow for access to different API fields when
## `authentik_core.token`
### `key` <span class="badge badge--version">authentik 2023.4+</span>
### `key`
Via the standard API, a token's key cannot be changed, it can only be rotated. This is to ensure a high entropy in it's key, and to prevent insecure data from being used. However, when provisioning tokens via a blueprint, it may be required to set a token to an existing value.
@ -26,7 +26,7 @@ For example:
## `authentik_core.user`
### `password` <span class="badge badge--version">authentik 2023.6+</span>
### `password`
Via the standard API, a user's password can only be set via the separate `/api/v3/core/users/<id>/set_password/` endpoint. In blueprints, the password of a user can be set using the `password` field.
@ -45,7 +45,7 @@ For example:
password: this-should-be-a-long-value
```
### `permissions` <span class="badge badge--version">authentik 2024.8+</span>
### `permissions`:ak-version[2024.8]
The `permissions` field can be used to set global permissions for a user. A full list of possible permissions is included in the JSON schema for blueprints.
@ -63,7 +63,7 @@ For example:
## `authentik_core.application`
### `icon` <span class="badge badge--version">authentik 2023.5+</span>
### `icon`
Application icons can be directly set to URLs with the `icon` field.
@ -81,7 +81,7 @@ For example:
## `authentik_sources_oauth.oauthsource`, `authentik_sources_saml.samlsource`, `authentik_sources_plex.plexsource`
### `icon` <span class="badge badge--version">authentik 2023.5+</span>
### `icon`
Source icons can be directly set to URLs with the `icon` field.
@ -99,7 +99,7 @@ For example:
## `authentik_flows.flow`
### `icon` <span class="badge badge--version">authentik 2023.5+</span>
### `icon`
Flow backgrounds can be directly set to URLs with the `background` field.
@ -119,7 +119,7 @@ For example:
## `authentik_rbac.role`
### `permissions` <span class="badge badge--version">authentik 2024.8+</span>
### `permissions`:ak-version[2024.8]
The `permissions` field can be used to set global permissions for a role. A full list of possible permissions is included in the JSON schema for blueprints.

View File

@ -4,7 +4,7 @@ To use the custom tags with your preferred editor, you must make the editor awar
For VS Code, for example, add these entries to your `settings.json`:
```
```json
{
"yaml.customTags": [
"!Condition sequence",
@ -301,7 +301,7 @@ The above example will resolve to something like this:
- "bar: (index: 2, letter: r)"
```
#### `!AtIndex` <span class="badge badge--version">authentik 2024.12+</span>
#### `!AtIndex`:ak-version[2024.12]
Minimal example:

View File

@ -42,7 +42,7 @@ ak_message("Access denied")
return False
```
import Functions from "../../expressions/_functions.md";
import Functions from "../../expressions/_functions.mdx";
<Functions />
@ -119,7 +119,7 @@ This includes the following:
- `context['prompt_data']`: Data which has been saved from a prompt stage or an external source. (Optional)
- `context['application']`: The application the user is in the process of authorizing. (Optional)
- `context['source']`: The source the user is authenticating/enrolling with. (Optional)
- `context['pending_user']`: The currently pending user, see [User](../../users-sources/user/user_ref.md)
- `context['pending_user']`: The currently pending user, see [User](../../users-sources/user/user_ref.mdx)
- `context['is_restored']`: Contains the flow token when the flow plan was restored from a link, for example the user clicked a link to a flow which was sent by an email stage. (Optional)
- `context['auth_method']`: Authentication method (this value is set by password stages) (Optional)

View File

@ -2,7 +2,7 @@
title: Managing flow context keys
---
[Flow context](../../../add-secure-apps/flows-stages/flow/context/index.md) can be managed in [Expression policies](../expression.mdx) via the `context['flow_plan'].context` variable.
[Flow context](../../../add-secure-apps/flows-stages/flow/context/index.mdx) can be managed in [Expression policies](../expression.mdx) via the `context['flow_plan'].context` variable.
Here's an example of setting a key in an Expression policy:

View File

@ -8,7 +8,7 @@ authentik provides several [standard policy types](./index.md#standard-policies)
We also document how to use a policy to [whitelist email domains](./expression/whitelist_email.md) and to [ensure unique email addresses](./expression/unique_email.md).
To learn more see also [bindings](../../add-secure-apps/flows-stages/bindings/index.md) and how to use the [authentik Wizard to bind policy bindings to the new application](../../add-secure-apps/applications/manage_apps.md#add-new-applications) (for example, to configure application-specific access).
To learn more see also [bindings](../../add-secure-apps/flows-stages/bindings/index.md) and how to use the [authentik Wizard to bind policy bindings to the new application](../../add-secure-apps/applications/manage_apps.mdx#add-new-applications) (for example, to configure application-specific access).
## Create a policy

View File

@ -15,7 +15,7 @@ If this is a fresh install, refer to our [technical documentation](../install-co
## Access Enterprise
Access your Enterprise features by first [purchasing a license](./manage-enterprise.md#buy-a-license) for the organization.
Access your Enterprise features by first [purchasing a license](./manage-enterprise.mdx#buy-a-license) for the organization.
To open the Customer Portal and buy a license, go to the Admin interface and in the left pane, navigate to **Enterprise -> Licenses**, and then click **Go to Customer Portal**.

View File

@ -7,7 +7,7 @@ The Enterprise release of authentik provides all of the functionality that we ha
Refer to our Enterprise documentation for information about creating and managing your organization, purchasing and activating a license, support, and managing billing and organization members.
- [Get started with Enterprise](./get-started.md)
- [Manage your Enterprise account](./manage-enterprise.md)
- [Manage your Enterprise account](./manage-enterprise.mdx)
- [Support for Enterprise accounts](./entsupport.md)
Our standard technical documentation covers how to configure, customize, and use authentik, whether the open source version that we have built our reputation on or our Enterprise version with dedicated support.

View File

@ -109,7 +109,7 @@ The following events occur when a license expires or the internal/external user
- Users can authenticate and authorize applications
- Licenses can be modified
- Users can be modified/deleted <span class="badge badge--version">authentik 2024.10.5+</span>
- Users can be modified/deleted:ak-version[2024.10.5]
After the violation is corrected (either the user count returns to be within the limits of the license or the license is renewed), authentik will return to the standard read-write mode and the notification will disappear.

View File

@ -29,7 +29,7 @@ user = list_flatten(["foo"])
# user = "foo"
```
### `ak_call_policy(name: str, **kwargs) -> PolicyResult` <span class="badge badge--version">authentik 2021.12+</span>
### `ak_call_policy(name: str, **kwargs) -> PolicyResult`
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.
@ -70,7 +70,7 @@ Example:
other_user = ak_user_by(username="other_user")
```
### `ak_user_has_authenticator(user: User, device_type: Optional[str] = None) -> bool` <span class="badge badge--version">authentik 2022.9+</span>
### `ak_user_has_authenticator(user: User, device_type: Optional[str] = None) -> bool`
Check if a user has any authenticator devices. Only fully validated devices are counted.
@ -87,7 +87,7 @@ Example:
return ak_user_has_authenticator(request.user)
```
### `ak_create_event(action: str, **kwargs) -> None` <span class="badge badge--version">authentik 2022.9+</span>
### `ak_create_event(action: str, **kwargs) -> None`
Create a new event with the action set to `action`. Any additional key-word parameters will be saved in the event context. Additionally, `context` will be set to the context in which this function is called.
@ -101,7 +101,7 @@ Example:
ak_create_event("my_custom_event", foo=request.user)
```
### `ak_create_jwt(user: User, provider: OAuth2Provider | str, scopes: list[str], validity = "seconds=60") -> str | None` <span class="badge badge--version">authentik 2025.2+</span>
### `ak_create_jwt(user: User, provider: OAuth2Provider | str, scopes: list[str], validity = "seconds=60") -> str | None`:ak-version[2025.2]
Create a new JWT signed by the given `provider` for `user`.
@ -136,7 +136,7 @@ ip_address('192.0.2.1') in ip_network('192.0.2.0/24')
# evaluates to True
```
## DNS resolution and reverse DNS lookups <span class="badge badge--version">authentik 2023.3+</span>
## DNS resolution and reverse DNS lookups
To resolve a hostname to a list of IP addresses, use the functions `resolve_dns(hostname)` and `resolve_dns(hostname, ip_version)`.

View File

@ -1,4 +1,4 @@
- `user`: The current user. This may be `None` if there is no contextual user. See [User](../users-sources/user/user_ref.md#object-properties).
- `user`: The current user. This may be `None` if there is no contextual user. See [User](../users-sources/user/user_ref.mdx#object-properties).
Example:

View File

@ -8,30 +8,30 @@ To install authentik automatically (skipping the Out-of-box experience), you can
Configure the default password for the `akadmin` user. Only read on the first startup. Can be used for any flow executor.
### `AUTHENTIK_BOOTSTRAP_TOKEN` <span class="badge badge--version">authentik 2021.8+</span>
### `AUTHENTIK_BOOTSTRAP_TOKEN`
Create a token for the default `akadmin` user. Only read on the first startup. The string you specify for this variable is the token key you can use to authenticate yourself to the API.
### `AUTHENTIK_BOOTSTRAP_EMAIL` <span class="badge badge--version">authentik 2023.3+</span>
### `AUTHENTIK_BOOTSTRAP_EMAIL`
Set the email address for the default `akadmin` user.
## Kubernetes
In the Helm values, set the `akadmin`user password and token:
In the Helm values, set the `akadmin` user password and token:
```text
```yaml
authentik:
bootstrap_token: test
bootstrap_password: test
bootstrap_token: test
bootstrap_password: test
```
To store the password and token in a secret, use:
```text
```yaml
envFrom:
- secretRef:
name: _some-secret_
- secretRef:
name: _some-secret_
```
where _some-secret_ contains the environment variables as in the documentation above.

View File

@ -82,7 +82,7 @@ To check if your config has been applied correctly, you can run the following co
The PostgreSQL settings `HOST`, `PORT`, `USER`, and `PASSWORD` support hot-reloading. Adding and removing read replicas doesn't support hot-reloading.
- `AUTHENTIK_POSTGRESQL__DEFAULT_SCHEMA` <span class="badge badge--version">authentik 2024.12+</span>
- `AUTHENTIK_POSTGRESQL__DEFAULT_SCHEMA`:ak-version[2024.12]
The name of the schema used by default in the database. Defaults to `public`.
@ -151,7 +151,7 @@ Additionally, you can set `AUTHENTIK_POSTGRESQL__CONN_HEALTH_CHECK` to perform h
- `AUTHENTIK_CACHE__TIMEOUT_REPUTATION`: Timeout for cached reputation until they expire in seconds, defaults to 300
:::info
`AUTHENTIK_CACHE__TIMEOUT_REPUTATION` only applies to the cache expiry, see [`AUTHENTIK_REPUTATION__EXPIRY`](#authentik_reputation__expiry-authentik-202382) to control how long reputation is persisted for.
`AUTHENTIK_CACHE__TIMEOUT_REPUTATION` only applies to the cache expiry, see [`AUTHENTIK_REPUTATION__EXPIRY`](#authentik_reputation__expiry) to control how long reputation is persisted for.
:::
## Channel Layer Settings (inter-instance communication)
@ -164,7 +164,7 @@ Additionally, you can set `AUTHENTIK_POSTGRESQL__CONN_HEALTH_CHECK` to perform h
- `AUTHENTIK_BROKER__TRANSPORT_OPTIONS`: Base64-encoded broker transport options
:::info
`AUTHENTIK_REDIS__CACHE_TIMEOUT_REPUTATION` only applies to the cache expiry, see [`AUTHENTIK_REPUTATION__EXPIRY`](#authentik_reputation__expiry-authentik-202382) to control how long reputation is persisted for.
`AUTHENTIK_REDIS__CACHE_TIMEOUT_REPUTATION` only applies to the cache expiry, see [`AUTHENTIK_REPUTATION__EXPIRY`](#authentik_reputation__expiry) to control how long reputation is persisted for.
:::
## Listen Settings
@ -327,47 +327,53 @@ Disable the inbuilt update-checker. Defaults to `false`.
- Kubeconfig
- Existence of a docker socket
### `AUTHENTIK_LDAP__TASK_TIMEOUT_HOURS` <span class="badge badge--version">authentik 2023.1+</span>
### `AUTHENTIK_LDAP__TASK_TIMEOUT_HOURS`
Timeout in hours for LDAP synchronization tasks.
Defaults to `2`.
### `AUTHENTIK_LDAP__PAGE_SIZE` <span class="badge badge--version">authentik 2023.6.1+</span>
### `AUTHENTIK_LDAP__PAGE_SIZE`
Page size for LDAP synchronization. Controls the number of objects created in a single task.
Defaults to `50`.
### `AUTHENTIK_LDAP__TLS__CIPHERS` <span class="badge badge--version">authentik 2022.7+</span>
### `AUTHENTIK_LDAP__TLS__CIPHERS`
Allows configuration of TLS Cliphers for LDAP connections used by LDAP sources. Setting applies to all sources.
Defaults to `null`.
### `AUTHENTIK_REPUTATION__EXPIRY` <span class="badge badge--version">authentik 2023.8.2+</span>
### `AUTHENTIK_REPUTATION__EXPIRY`
Configure how long reputation scores should be saved for in seconds. Note that this is different than [`AUTHENTIK_REDIS__CACHE_TIMEOUT_REPUTATION`](#redis-settings), as reputation is saved to the database every 5 minutes.
Defaults to `86400`.
### `AUTHENTIK_SESSION_STORAGE` <span class="badge badge--version">authentik 2024.4+</span>
### `AUTHENTIK_SESSION_STORAGE`:ak-version[2024.4]
Configure if the sessions are stored in the cache or the database. Defaults to `cache`. Allowed values are `cache` and `db`. Note that changing this value will invalidate all previous sessions.
### `AUTHENTIK_WEB__WORKERS` <span class="badge badge--version">authentik 2022.9+</span>
### `AUTHENTIK_SESSIONS__UNAUTHENTICATED_AGE`:ak-version[2025.4]
Configure how long unauthenticated sessions last for. Does not impact how long authenticated sessions are valid for. See [../../add-secure-apps/flows-stages/stages/user_login/index.md](the User login stage) for session validity.
Defaults to `days=1`.
### `AUTHENTIK_WEB__WORKERS`
Configure how many gunicorn worker processes should be started (see https://docs.gunicorn.org/en/stable/design.html).
Defaults to 2. A value below 2 workers is not recommended. In environments where scaling with multiple replicas of the authentik server is not possible, this number can be increased to handle higher loads.
### `AUTHENTIK_WEB__THREADS` <span class="badge badge--version">authentik 2022.9+</span>
### `AUTHENTIK_WEB__THREADS`
Configure how many gunicorn threads a worker processes should have (see https://docs.gunicorn.org/en/stable/design.html).
Defaults to 4.
### `AUTHENTIK_WORKER__CONCURRENCY` <span class="badge badge--version">authentik 2023.9+</span>
### `AUTHENTIK_WORKER__CONCURRENCY`
Configure Celery worker concurrency for authentik worker (see https://docs.celeryq.dev/en/latest/userguide/configuration.html#worker-concurrency). This essentially defines the number of worker processes spawned for a single worker.
@ -383,7 +389,7 @@ Configure the path under which authentik is serverd. For example to access authe
Defaults to `/`.
## System settings <span class="badge badge--version">authentik 2024.2+</span>
## System settings:ak-version[2024.2]
Additional settings are configurable using the Admin interface, under **System** -> **Settings** or using the API.

View File

@ -4,7 +4,7 @@ title: Installation and Configuration
Everything you need to get authentik up and running!
The installation process for our free open source version and our [Enterprise](../enterprise/index.md) version are exactly the same. For information about obtaining an Enterprise license, refer to [License management](../enterprise/manage-enterprise.md#license-management) documentation.
The installation process for our free open source version and our [Enterprise](../enterprise/index.md) version are exactly the same. For information about obtaining an Enterprise license, refer to [License management](../enterprise/manage-enterprise.mdx#license-management) documentation.
For information about upgrading to a new version, refer to the <b>Upgrade</b> section in the relevant [Release Notes](../releases) and to our [Upgrade authentik](./upgrade.mdx) documentation.

View File

@ -11,7 +11,7 @@ User settings are now configured using flows and stages, allowing administrators
### `client_credentials` support
authentik now supports the OAuth `client_credentials` grant for machine-to-machine authentication. See [OAuth2 Provider](../../add-secure-apps/providers/oauth2/index.md)
authentik now supports the OAuth `client_credentials` grant for machine-to-machine authentication. See [OAuth2 Provider](../../add-secure-apps/providers/oauth2/index.mdx)
## Deprecations

View File

@ -24,7 +24,7 @@ slug: "/releases/2022.5"
- OAuth2: Add support for `form_post` response mode
- Don't prompt users for MFA when they've authenticated themselves within a time period
You can now configure any [Authenticator Validation Stage](../../add-secure-apps/flows-stages/stages/authenticator_validate/index.md) stage to not ask for MFA validation if the user has previously authenticated themselves with an MFA device (of any of the selected classes) in the `Last validation threshold`.
You can now configure any [Authenticator Validation Stage](../../add-secure-apps/flows-stages/stages/authenticator_validate/index.mdx) stage to not ask for MFA validation if the user has previously authenticated themselves with an MFA device (of any of the selected classes) in the `Last validation threshold`.
- Optimise bundling of web assets

View File

@ -13,7 +13,7 @@ slug: "/releases/2022.8"
- Blueprints
Blueprints allow for the configuration, automation and templating of authentik objects and configurations. They can be used to bootstrap new instances, configure them automatically without external tools, and to template configurations for sharing. See more [here](../../customize/blueprints/index.md).
Blueprints allow for the configuration, automation and templating of authentik objects and configurations. They can be used to bootstrap new instances, configure them automatically without external tools, and to template configurations for sharing. See more [here](../../customize/blueprints/index.mdx).
For installations upgrading to 2022.8, if a single flow exists, then the default blueprints will not be activated, to not overwrite user modifications.

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