From 83854281d0a1f3eae34887a23253e3010d437ed0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 14:37:29 +0200 Subject: [PATCH 01/68] ci: bump github/codeql-action from 4.36.1 to 4.36.2 (#22921) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.36.1 to 4.36.2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/87557b9c84dde89fdd9b10e88954ac2f4248e463...8aad20d150bbac5944a9f9d289da16a4b0d87c1e) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.36.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/qa-codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/qa-codeql.yml b/.github/workflows/qa-codeql.yml index 726c696413..8edacbf92f 100644 --- a/.github/workflows/qa-codeql.yml +++ b/.github/workflows/qa-codeql.yml @@ -28,10 +28,10 @@ jobs: - name: Setup authentik env uses: ./.github/actions/setup - name: Initialize CodeQL - uses: github/codeql-action/init@87557b9c84dde89fdd9b10e88954ac2f4248e463 # v4.36.1 + uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 with: languages: ${{ matrix.language }} - name: Autobuild - uses: github/codeql-action/autobuild@87557b9c84dde89fdd9b10e88954ac2f4248e463 # v4.36.1 + uses: github/codeql-action/autobuild@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@87557b9c84dde89fdd9b10e88954ac2f4248e463 # v4.36.1 + uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 From 668f363ae766a3b7075c40cb5bb7eaeccc1ceaa2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 14:37:46 +0200 Subject: [PATCH 02/68] ci: bump getsentry/action-release from 3.6.1 to 3.7.0 (#22917) Bumps [getsentry/action-release](https://github.com/getsentry/action-release) from 3.6.1 to 3.7.0. - [Release notes](https://github.com/getsentry/action-release/releases) - [Changelog](https://github.com/getsentry/action-release/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/action-release/compare/f71adb49d4b2aeeda98052d3de234bbb0f3e03ab...ff07929a6537bac57790c3451cf4d364aca38528) --- updated-dependencies: - dependency-name: getsentry/action-release dependency-version: 3.7.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-publish.yml b/.github/workflows/release-publish.yml index 736b9bd149..58914cc19c 100644 --- a/.github/workflows/release-publish.yml +++ b/.github/workflows/release-publish.yml @@ -228,7 +228,7 @@ jobs: container=$(docker container create ${{ steps.ev.outputs.imageMainName }}) docker cp ${container}:web/ . - name: Create a Sentry.io release - uses: getsentry/action-release@f71adb49d4b2aeeda98052d3de234bbb0f3e03ab # v3 + uses: getsentry/action-release@ff07929a6537bac57790c3451cf4d364aca38528 # v3 continue-on-error: true env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} From 2176cadb4c8ecf4a4e37d5558208d98a0210e1a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 14:38:01 +0200 Subject: [PATCH 03/68] core: bump ruff from 0.15.15 to 0.15.16 (#22918) Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.15 to 0.15.16. - [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.15.15...0.15.16) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.15.16 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- uv.lock | 40 ++++++++++++++++++++-------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 90502505af..955a7dfc78 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -101,7 +101,7 @@ dev = [ "pytest-timeout==2.4.0", "pytest==9.0.3", "requests-mock==1.12.1", - "ruff==0.15.15", + "ruff==0.15.16", "selenium==4.44.0", "types-channels==4.3.0.20260518", "types-docker==7.1.0.20260518", diff --git a/uv.lock b/uv.lock index 48bbddddcf..b6bb5b2cfc 100644 --- a/uv.lock +++ b/uv.lock @@ -457,7 +457,7 @@ dev = [ { name = "pytest-randomly", specifier = "==4.1.0" }, { name = "pytest-timeout", specifier = "==2.4.0" }, { name = "requests-mock", specifier = "==1.12.1" }, - { name = "ruff", specifier = "==0.15.15" }, + { name = "ruff", specifier = "==0.15.16" }, { name = "selenium", specifier = "==4.44.0" }, { name = "types-channels", specifier = "==4.3.0.20260518" }, { name = "types-docker", specifier = "==7.1.0.20260518" }, @@ -3314,27 +3314,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.15" +version = "0.15.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/84/6f/a76f7d96e5c962f5b69cee865e49c15c1116897c01990faa8a57edb62e7f/ruff-0.15.15.tar.gz", hash = "sha256:b8dff018130b46d8e5bf0f926ef6b60cf871d6d5ae45fc9334e09632daa741d6", size = 4706985, upload-time = "2026-05-28T14:16:57.784Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/bd/5f7ec371001337d8fa61701c186ff8b613ecac1651848c5950f4c4d5f2e9/ruff-0.15.16.tar.gz", hash = "sha256:d05e78d38c78caf020b03789e25106c93017db5a0cb6e2819885018c61343b78", size = 4714267, upload-time = "2026-06-04T16:33:09.974Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/9d/3a45c05b8ab04b4705989de70a79008e27c8003296a0feaee9edc18dd7e9/ruff-0.15.15-py3-none-linux_armv6l.whl", hash = "sha256:cf93e5388f412e1b108b1f8b34a6e036b70fe8aff89393befad96fe48670311b", size = 10710652, upload-time = "2026-05-28T14:16:06.701Z" }, - { url = "https://files.pythonhosted.org/packages/05/66/da974431624bf3b49f6ee1f9543c02d929ff1cba78b0d5a79c38cf21f744/ruff-0.15.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac5a646d1f6a7dadd5d50842dae2c1f9862ac887ef5d1b1375e02def791fde6e", size = 11096615, upload-time = "2026-05-28T14:16:23.313Z" }, - { url = "https://files.pythonhosted.org/packages/8c/09/7443452e5d290230a712103f2fdceeef7184f3ec99a2bd01c8be78aaceb5/ruff-0.15.15-py3-none-macosx_11_0_arm64.whl", hash = "sha256:77d955a431430c66f72dd94e379ad38a16daea3d25094872ac4edf9e797be530", size = 10436683, upload-time = "2026-05-28T14:16:40.974Z" }, - { url = "https://files.pythonhosted.org/packages/53/01/d330c26a57fa4f3943a14424904027428315b700fe4d14a84bb123a649e5/ruff-0.15.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7614ee79c69788cf6cedd568069ade9cecc22a1ad20494efe8d0c9ebb4b622d4", size = 10769064, upload-time = "2026-05-28T14:16:28.905Z" }, - { url = "https://files.pythonhosted.org/packages/1d/85/cc8770f8bdff541b1da8392d1634141fe4a0e3f4ee596605959b7906c27f/ruff-0.15.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3cdb1679e06a1f6b47bc384714ae96f6e2fb65ca441eb78c43d2ca554176ce1f", size = 10511987, upload-time = "2026-05-28T14:16:43.732Z" }, - { url = "https://files.pythonhosted.org/packages/7c/29/8c190c1472b63013583ba391f3342036e02010544c1270455ed8e519bdf3/ruff-0.15.15-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2728b93d7b23a603ea2c0ac6eb73d760bd38ec9de35f35fb41e18f7a3fee7622", size = 11275100, upload-time = "2026-05-28T14:16:55.244Z" }, - { url = "https://files.pythonhosted.org/packages/9f/6b/7e145ce2cc8e63d6834eca03d83a0e18d121def5c69f91b4cf4011ed4879/ruff-0.15.15-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be582fcc0db438902c7792b08d6ddf6c9b9e21addaa10092c2c741cfb09e5a45", size = 12176903, upload-time = "2026-05-28T14:16:14.368Z" }, - { url = "https://files.pythonhosted.org/packages/80/a3/d5974637f68e451f7fadf015cf3101d1cd7d8ba5027cffe0b9e3826ebe6b/ruff-0.15.15-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7aa77465b8ecaf1a27bea098d696f7fed5e1eccbd10b321b682d6de586ae5627", size = 11404550, upload-time = "2026-05-28T14:16:20.138Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1c/e6e5e568f22be4fb05d6244234aba384c06b451252453b821e1a529263cf/ruff-0.15.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48decfa11d740de4889de623be1463308346312f2409a56e24aa280c86162dc4", size = 11382027, upload-time = "2026-05-28T14:16:46.615Z" }, - { url = "https://files.pythonhosted.org/packages/1d/01/170921b49fcd2e8858825593f91cf7146c3e40a5c3e6df763e4bb0484dde/ruff-0.15.15-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a5015088452ca0081387063649ec67f06d3d1d6b8b936a1f836b5e9657ecd48c", size = 11366041, upload-time = "2026-05-28T14:16:26.247Z" }, - { url = "https://files.pythonhosted.org/packages/87/54/a7bad711d7de93254e15e06a4c375b89a03d18de45d3e5dcc86a4472fb1a/ruff-0.15.15-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f5294aab6356c81600fcdea3a62bb1b924dfd5e91767c12318d3f68f86af57cd", size = 10741795, upload-time = "2026-05-28T14:16:17.11Z" }, - { url = "https://files.pythonhosted.org/packages/c9/31/38c075963668f8b41c6914ee0f6f318727fbe30ab9145cb29e6df464c5fa/ruff-0.15.15-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db5bd4d802415cca656dc1616070b725952d6ae95eb5d4831e49fbd94a38f75f", size = 10511117, upload-time = "2026-05-28T14:16:31.767Z" }, - { url = "https://files.pythonhosted.org/packages/9d/96/6ff689e1f7e375d1d97075eca022f74c2bab59554a432fe4d2e6f091986a/ruff-0.15.15-py3-none-musllinux_1_2_i686.whl", hash = "sha256:587a6278ed42059191c1a466e490bd7930fb50bd2e255398bc29616c895a61cb", size = 10994867, upload-time = "2026-05-28T14:16:35.149Z" }, - { url = "https://files.pythonhosted.org/packages/c3/c2/5dce0ab9f92a8d534fa62b9bf9caca3eddb8c1a81b616f5e195ada4f0d6e/ruff-0.15.15-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:df0c1c084f5f4be9812f61518a45c440d3c30d69ce4bf6c5270e66d38338f02a", size = 11482101, upload-time = "2026-05-28T14:16:49.598Z" }, - { url = "https://files.pythonhosted.org/packages/b1/c0/1003b60edd697c649faf61f1a34094b1abb38fb3d1181e3f895781250a08/ruff-0.15.15-py3-none-win32.whl", hash = "sha256:29428ea79694afbe756d45fd59b36f22b6b020dc0443cf7de0173046236964b9", size = 10716774, upload-time = "2026-05-28T14:16:52.337Z" }, - { url = "https://files.pythonhosted.org/packages/02/a8/1269eddd6945a06c23f055ef7848886e37cf9d6a8bebb386a3115f01470c/ruff-0.15.15-py3-none-win_amd64.whl", hash = "sha256:8df0323902e15e24bc4bf246da830573d3cf3352bd0b9a164eab335d111ff4a4", size = 11868463, upload-time = "2026-05-28T14:16:11.333Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b2/920464c907b191e37469d477a1aa8bc048b8f36c4c1610dfa4ab87b39e18/ruff-0.15.15-py3-none-win_arm64.whl", hash = "sha256:3c8ceca6792f38196b8f589bc92eccd03eef286602da92e5dc05cc42ef6441b7", size = 11138498, upload-time = "2026-05-28T14:16:38.425Z" }, + { url = "https://files.pythonhosted.org/packages/0c/42/53ef1c3953f157956db9bf7861e3bc50b9b887ce93300aa48cdba8336fe6/ruff-0.15.16-py3-none-linux_armv6l.whl", hash = "sha256:6ac3c0b3969cc6cf6b158c4e2f8f682acb58e7d700d8a44b65ecdc72d66ab0b2", size = 10709025, upload-time = "2026-06-04T16:32:51.935Z" }, + { url = "https://files.pythonhosted.org/packages/93/9a/a79159346f19134a956607754e57d8d128f7a4c00f4ad2f7514d224c172c/ruff-0.15.16-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:197c207ed75ffba54a0dec23db4aa939a27a3053073e085e0042433cbdc58e4a", size = 11063550, upload-time = "2026-06-04T16:32:42.24Z" }, + { url = "https://files.pythonhosted.org/packages/bc/72/3ce2ac000a5299ec238e01f51397b3b653c93b077d9b1bfe8715bb895f20/ruff-0.15.16-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3a39fec45ab316cc23e7558f23fea4a70403ddb5648ea9a4a3854a16973d0071", size = 10421345, upload-time = "2026-06-04T16:32:37.251Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c2/cc7fad3ec9169373f5b6a18f1917b91080feec40c3f9658334a1d28e2f03/ruff-0.15.16-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba93191d79003116b95128c9d306e045200fdbd0bccb782b110f3cd1d4abc5cf", size = 10757217, upload-time = "2026-06-04T16:32:54.722Z" }, + { url = "https://files.pythonhosted.org/packages/69/d2/3474009eaa0a65b31fa7152a2fad5e2f050c640ceb1e6b02ee6922e94c82/ruff-0.15.16-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6ee4b90520630120ef032aa5cc10db483852dff950e78b1d717e2993a61ac8d", size = 10507035, upload-time = "2026-06-04T16:33:05.343Z" }, + { url = "https://files.pythonhosted.org/packages/ca/81/b7ae6ccbd11f0c8dc3d5d67fc4be9b57ff57ca86ba56152021378e1277f2/ruff-0.15.16-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e4215bc938bc3c8215c1472c1aa437e310fee20cd427335fec9d7e609563628", size = 11255291, upload-time = "2026-06-04T16:32:49.49Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e1/46e526f1a7cc90857ce6ddf25fbb77eb6568651ac38d71b033af07076dd5/ruff-0.15.16-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c8d26be963b090f10e29abc8b3e74a2a321f6fa34e02424e30b5af89350ecbb", size = 12124922, upload-time = "2026-06-04T16:33:07.821Z" }, + { url = "https://files.pythonhosted.org/packages/1a/da/5c791b088b596b24d0deb967fa28ae02ad751a140c0b9ea81c5ab915d6c0/ruff-0.15.16-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f198cf4123602a2280ed46c307bcbafe41758d6fee5b456b6b6058ca1514b3b4", size = 11332186, upload-time = "2026-06-04T16:33:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/72/11/5da87abe20047c8962361473923ebb2f62b595250126aadfad8c20649c1e/ruff-0.15.16-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb27515fa6240fb586ae82b901a59e67d24acff86f2190b433dc542fe0435aeb", size = 11373541, upload-time = "2026-06-04T16:32:47.007Z" }, + { url = "https://files.pythonhosted.org/packages/fe/2a/8554754c23a854ae3fd6b507e36ad61ddb121e298c6d5d617dec94ed0f14/ruff-0.15.16-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a267c46ba1593fc26b8eecbea050b39d40c0b6bb7781ee11c90a02cd10032951", size = 11353014, upload-time = "2026-06-04T16:32:34.795Z" }, + { url = "https://files.pythonhosted.org/packages/62/25/62ea41529ec89f742ea3fed9cb1059c72877ec7cf9b9e99ac9cf3294d1d9/ruff-0.15.16-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:528c68f39a91498a8d50e91ff5985df3d105782bab49cc378e73ac26bff083e8", size = 10737467, upload-time = "2026-06-04T16:32:26.348Z" }, + { url = "https://files.pythonhosted.org/packages/90/17/334d3ad9de4d40f9dd58fdd09e35ce64553bb501e2f19a839e2fb6be14fc/ruff-0.15.16-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7ed55c58950df60589a9a7a5d2f8fa5f54ebd287163be805adfe6ee95a9de123", size = 10521910, upload-time = "2026-06-04T16:32:32.54Z" }, + { url = "https://files.pythonhosted.org/packages/4d/bd/3ac7c6ae77a885c1004b3dda2446ea401768d24f851c14b4ad4b24f6639c/ruff-0.15.16-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d482feaf51512b50f9790ceb417a56a61dd1e9d9bf967662b9ed27c01b34f53a", size = 10979190, upload-time = "2026-06-04T16:32:57.492Z" }, + { url = "https://files.pythonhosted.org/packages/33/d7/609546e6a413c3f216fbf2a50c928f97c80939154f6a0503114094a86191/ruff-0.15.16-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1e15bc8c94513dae2a40cc9ef07c94fdd4ecc9e29dabebeebe170f952322c9e3", size = 11477014, upload-time = "2026-06-04T16:32:44.687Z" }, + { url = "https://files.pythonhosted.org/packages/74/0d/f2cd247ad32633a5c36e97141a2c21b11c6279f7957bc2ff360b1e08fddd/ruff-0.15.16-py3-none-win32.whl", hash = "sha256:580378f7bd4aa25f72e74aa54948a9622f142b1e509521dd10902e886681cc1e", size = 10735541, upload-time = "2026-06-04T16:32:30.145Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9e/02e845ef151b1dee585e55c4739f8e1734ae1d9f1221dff65761c162208b/ruff-0.15.16-py3-none-win_amd64.whl", hash = "sha256:408256017284eddf98fff77b29aa4fb30f586042d535b2d9befc6512f400aaec", size = 11843403, upload-time = "2026-06-04T16:32:39.76Z" }, + { url = "https://files.pythonhosted.org/packages/15/19/016553f86f207450aebebc2b2b5088d086b901cc8186c02ac4284db3bd88/ruff-0.15.16-py3-none-win_arm64.whl", hash = "sha256:8cd61783afb39638a7133ef0d2dfb1e91277593962f81b5a8423eb0b888a6121", size = 11134555, upload-time = "2026-06-04T16:33:00.136Z" }, ] [[package]] From 24157caaf6ec56482a8f6e2a49be5930c7fab835 Mon Sep 17 00:00:00 2001 From: Emil Burzo Date: Mon, 8 Jun 2026 14:48:43 +0200 Subject: [PATCH 04/68] ci: remove redundant if in cherry-pick action (#22859) --- .github/actions/cherry-pick/action.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/actions/cherry-pick/action.yml b/.github/actions/cherry-pick/action.yml index 5c6318677b..0511da8eaf 100644 --- a/.github/actions/cherry-pick/action.yml +++ b/.github/actions/cherry-pick/action.yml @@ -134,12 +134,7 @@ runs: # Determine which labels to process if [ "${REASON}" = "label_added_to_merged_pr" ]; then - # Only process the specific label that was just added - if [ "$EVENT_NAME" = "issues" ]; then - LABEL_NAME="$LABEL_NAME_CTX" - else - LABEL_NAME="$LABEL_NAME_CTX" - fi + LABEL_NAME="$LABEL_NAME_CTX" if [[ "$LABEL_NAME" =~ ^backport/(.+)$ ]]; then echo "labels=$LABEL_NAME" >> $GITHUB_OUTPUT From 54595de4b9f10311b5e3db28e18a6501effbd987 Mon Sep 17 00:00:00 2001 From: Dominic R Date: Mon, 8 Jun 2026 08:52:01 -0400 Subject: [PATCH 05/68] website/integrations: add Notion integration (#22887) Agent-thread: https://sdko.org/internal/thr/ak/019e97d4-d2aa-7560-8db1-d175217cb9ac A7k-product: product A7k-product-repo: 1 Co-authored-by: Agent --- .../documentation/notion/index.md | 203 ++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 website/integrations/documentation/notion/index.md diff --git a/website/integrations/documentation/notion/index.md b/website/integrations/documentation/notion/index.md new file mode 100644 index 0000000000..9607dc8a4f --- /dev/null +++ b/website/integrations/documentation/notion/index.md @@ -0,0 +1,203 @@ +--- +title: Integrate with Notion +sidebar_label: Notion +support_level: community +--- + +## What is Notion? + +> Notion is a workspace for notes, docs, projects, wikis, and collaboration. +> +> -- https://www.notion.com + +## Preparation + +The following placeholders are used in this guide: + +- `authentik.company` is the FQDN of the authentik installation. + +:::info +This documentation lists only the settings that you need to change from their default values. Be aware that any changes other than those explicitly mentioned in this guide could cause issues accessing your application. +::: + +:::info Notion requirements +SAML SSO requires a Notion Business or Enterprise plan. SCIM provisioning requires a Notion Enterprise plan. Notion requires domain verification before SAML SSO can be enabled; domain verification is outside the scope of this guide. +::: + +## authentik configuration + +To support the integration of Notion with authentik, you need to create property mappings and an application/provider pair in authentik. + +### Create property mappings + +1. Log in to authentik as an administrator and open the authentik Admin interface. +2. Navigate to **Customization** > **Property Mappings** and click **Create**. +3. Create four **SAML Provider Property Mapping**s with the following settings: + - **Email mapping**: + - **Name**: `Notion email` + - **SAML Attribute Name**: `email` + - **Expression**: + + ```python + return request.user.email + ``` + + - **First name mapping**: + - **Name**: `Notion firstName` + - **SAML Attribute Name**: `firstName` + - **Expression**: + + ```python + return request.user.name + ``` + + - **Last name mapping**: + - **Name**: `Notion lastName` + - **SAML Attribute Name**: `lastName` + - **Expression**: + + ```python + return "" + ``` + + - **Profile photo mapping**: + - **Name**: `Notion profilePhoto` + - **SAML Attribute Name**: `profilePhoto` + - **Expression**: + + ```python + avatar = request.user.avatar + if "://" not in avatar: + return "" + return avatar + ``` + +### Create an application and provider in authentik + +1. Log in to authentik as an administrator and open the authentik Admin interface. +2. Navigate to **Applications** > **Applications** and click **New Application** to open the application wizard. + - **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings. Take note of the **Slug** as it will be required later. + - **Choose a Provider type**: select **SAML Provider** as the provider type. + - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. + - Set **ACS URL** to `https://temp.temp`. You will replace this after completing the Notion configuration. + - Set **Audience** to `https://www.notion.so/sso/saml`. + - Under **Advanced protocol settings**: + - Select an available **Signing Certificate**. + - Set **NameID Property Mapping** to `authentik default SAML Mapping: Email`. + - Add the four property mappings that you created in the previous section. + - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. +3. Click **Submit** to save the new application and provider. + +## Notion configuration + +### Configure SAML SSO + +1. Log in to Notion as a workspace owner. +2. Open the SAML SSO settings: + - **Business Plan**: navigate to **Settings** > **General**. If you want access controlled through SAML or SCIM, remove all entries from **Allowed email domains**; otherwise, users with those domains can still join outside IdP provisioning. Then, open **Settings** > **Identity**. + - **Enterprise Plan**: open the workspace switcher, select **Manage organization**, and open the **General** tab. +3. Enable **SAML SSO**. +4. In the SAML SSO configuration modal, under **Identity Provider Details**, select **Identity Provider URL** and enter `https://authentik.company/application/saml//metadata/`. +5. Copy the **Assertion Consumer Service (ACS) URL** from Notion. +6. Save the SAML SSO configuration. + +## Reconfigure authentik provider + +1. In authentik, navigate to **Applications** > **Providers**. +2. Edit the SAML provider that you created for Notion. +3. Set **ACS URL** to the **Assertion Consumer Service (ACS) URL** that you copied from Notion. +4. Click **Update**. + +## SCIM provisioning _(optional)_ + +You can configure SCIM provisioning to sync users and groups from authentik to Notion. Notion requires one SCIM API token per workspace. If you add the SCIM provider as a backchannel provider later, only users who can view this application are synchronized. + +### Notion configuration + +#### Create a SCIM API token + +1. Log in to Notion as an Enterprise Plan organization owner. +2. Open the workspace switcher and select **Manage organization**. +3. In the **General** tab, select **SCIM provisioning**. +4. Copy an existing token or click **Add token** to create a new token. + +### authentik configuration + +#### Create a SCIM property mapping + +Notion requires the SCIM `userName` field to contain the user's email address. + +1. Log in to authentik as an administrator and open the authentik Admin interface. +2. Navigate to **Customization** > **Property Mappings** and click **Create**. +3. Select **SCIM Provider Mapping** and click **Next**. +4. Enter the following values: + - **Name**: `Notion SCIM user` + - **Expression**: + + ```python + given_name, family_name = request.user.name, " " + formatted = request.user.name + " " + if " " in request.user.name: + given_name, _, family_name = request.user.name.partition(" ") + formatted = request.user.name + + avatar = request.user.avatar + photos = None + if "://" in avatar: + photos = [{"value": avatar, "type": "photo"}] + + emails = [] + if request.user.email != "": + emails = [{ + "value": request.user.email, + "type": "work", + "primary": True, + }] + return { + "userName": request.user.email, + "name": { + "formatted": formatted, + "givenName": given_name, + "familyName": family_name, + }, + "displayName": request.user.name, + "photos": photos, + "active": request.user.is_active, + "emails": emails, + } + ``` + +5. Click **Finish**. + +#### Create a SCIM provider in authentik + +1. Log in to authentik as an administrator and open the authentik Admin interface. +2. Navigate to **Applications** > **Providers** and click **Create**. + - **Choose a Provider type**: select **SCIM Provider** as the provider type. + - **Configure the Provider**: provide a name for the provider, and the following required configurations. + - **URL**: `https://api.notion.com/scim/v2` + - **Token**: paste the SCIM API token from Notion. + - Under **Attribute mapping**: + - Remove `authentik default SCIM Mapping: User` from **Selected User Property Mappings** and add `Notion SCIM user`. + - Under **Selected Group Property Mappings**, add `authentik default SCIM Mapping: Group`. +3. Click **Finish** to save the provider. + +#### Set the SCIM provider as a backchannel provider + +1. Log in to authentik as an administrator and open the authentik Admin interface. +2. Navigate to **Applications** > **Applications** and click the name of your Notion application. +3. Click the plus (+) icon next to **Backchannel Providers** and select the SCIM provider that you created. +4. Click **Save Changes**. + +## Configuration verification + +To confirm that authentik is properly configured with Notion, open Notion and log in with SAML SSO. + +To confirm that SCIM is properly configured, open the Notion SCIM provider in authentik and click the run button on the **Full sync for SCIM provider** task. After the sync completes, verify that users with access to the Notion application are provisioned in Notion. + +## Resources + +- [Notion Help Center - SAML SSO](https://www.notion.com/help/saml-sso-configuration) +- [Notion Help Center - Set up Identity Provider (IdP) for SAML SSO](https://www.notion.com/help/set-up-identity-provider-for-saml-sso) +- [Notion Help Center - Provision users & groups with SCIM](https://www.notion.com/help/provision-users-and-groups-with-scim) +- [Notion Help Center - Set up Identity Provider (IdP) for SCIM](https://www.notion.com/help/set-up-identity-provider-for-scim) From 5727ae4271967ba394cfd0c5a30ce000005d6744 Mon Sep 17 00:00:00 2001 From: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com> Date: Mon, 8 Jun 2026 14:55:31 +0200 Subject: [PATCH 06/68] core, internal, packages: fix British spellings flagged by cspell (#22819) * core, internal, packages: fix British spellings flagged by cspell Apply American spellings in Python docstrings/comments, Go log messages, a Rust doc comment, and a template comment (behaviour->behavior, initialise->initialize, finalise->finalize, etc.). Part of enabling cspell's British-spelling rule; the rule itself lands in a separate PR once all areas are clean. Co-Authored-By: Playpen Agent <279763771+playpen-agent@users.noreply.github.com> * gen Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer Co-authored-by: Playpen Agent <279763771+playpen-agent@users.noreply.github.com> Co-authored-by: Jens Langhammer --- authentik/core/templates/base/skeleton.html | 2 +- authentik/flows/views/executor.py | 2 +- authentik/lib/avatars.py | 2 +- authentik/providers/ldap/api.py | 2 +- authentik/rbac/permissions.py | 2 +- authentik/sources/oauth/types/github.py | 2 +- authentik/stages/authenticator/models.py | 2 +- authentik/stages/authenticator_sms/tests.py | 2 +- authentik/stages/invitation/stage.py | 2 +- authentik/stages/user_delete/stage.py | 2 +- authentik/stages/user_login/stage.py | 2 +- authentik/stages/user_write/stage.py | 2 +- internal/outpost/ak/api.go | 2 +- internal/outpost/ak/global.go | 2 +- internal/outpost/ldap/bind/direct/direct.go | 2 +- internal/outpost/ldap/bind/memory/memory.go | 4 ++-- internal/outpost/ldap/search/memory/memory.go | 4 ++-- packages/ak-common/src/arbiter.rs | 4 ++-- packages/client-go/model_ldap_outpost_config.go | 2 +- packages/client-rust/src/models/ldap_outpost_config.rs | 2 +- packages/client-ts/src/models/LDAPOutpostConfig.ts | 2 +- schema.yml | 2 +- 22 files changed, 25 insertions(+), 25 deletions(-) diff --git a/authentik/core/templates/base/skeleton.html b/authentik/core/templates/base/skeleton.html index 89cc7a4c9e..f6bbec300b 100644 --- a/authentik/core/templates/base/skeleton.html +++ b/authentik/core/templates/base/skeleton.html @@ -12,7 +12,7 @@ - {# 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 #} + {# Darkreader breaks the site regardless of theme as its not compatible with webcomponents, and we default to a dark theme based on preferred color-scheme #} {% block title %}{% trans title|default:brand.branding_title %}{% endblock %} diff --git a/authentik/flows/views/executor.py b/authentik/flows/views/executor.py index 0b2ebdefdb..2aa4779b1f 100644 --- a/authentik/flows/views/executor.py +++ b/authentik/flows/views/executor.py @@ -196,7 +196,7 @@ class FlowExecutorView(APIView): return self.handle_invalid_flow(exc) except EmptyFlowException as exc: self._logger.warning("f(exec): Flow is empty", exc=exc) - # To match behaviour with loading an empty flow plan from cache, + # To match behavior with loading an empty flow plan from cache, # we don't show an error message here, but rather call _flow_done() return self._flow_done() # We don't save the Plan after getting the next stage diff --git a/authentik/lib/avatars.py b/authentik/lib/avatars.py index 735ef99626..74851d6eaf 100644 --- a/authentik/lib/avatars.py +++ b/authentik/lib/avatars.py @@ -59,7 +59,7 @@ def avatar_mode_gravatar(user: User, mode: str) -> str | None: def generate_colors(text: str) -> tuple[str, str]: - """Generate colours based on `text`""" + """Generate colors based on `text`""" color = ( int(md5(text.lower().encode("utf-8"), usedforsecurity=False).hexdigest(), 16) % 0xFFFFFF ) # nosec diff --git a/authentik/providers/ldap/api.py b/authentik/providers/ldap/api.py index 228a2b729e..5bcff04bc4 100644 --- a/authentik/providers/ldap/api.py +++ b/authentik/providers/ldap/api.py @@ -91,7 +91,7 @@ class LDAPOutpostConfigSerializer(ModelSerializer): unbind_flow_slug = SerializerMethodField() def get_application_slug(self, instance: LDAPProvider) -> str: - """Prioritise backchannel slug over direct application slug""" + """Prioritize backchannel slug over direct application slug""" if instance.backchannel_application: return instance.backchannel_application.slug return instance.application.slug diff --git a/authentik/rbac/permissions.py b/authentik/rbac/permissions.py index e86f9897a2..2e1cb905e2 100644 --- a/authentik/rbac/permissions.py +++ b/authentik/rbac/permissions.py @@ -22,7 +22,7 @@ class ObjectPermissions(DjangoObjectPermissions): lookup = getattr(view, "lookup_url_kwarg", None) or getattr(view, "lookup_field", None) if lookup and lookup in view.kwargs: return True - # Legacy behaviour: + # Legacy behavior: # Allow creation of objects even without explicit permission queryset = self._queryset(view) required_perms = self.get_required_permissions(request.method, queryset.model) diff --git a/authentik/sources/oauth/types/github.py b/authentik/sources/oauth/types/github.py index 92b32fdb12..3c951f7925 100644 --- a/authentik/sources/oauth/types/github.py +++ b/authentik/sources/oauth/types/github.py @@ -76,7 +76,7 @@ class GitHubType(SourceType): chosen_email = info.get("email") if not chosen_email: # The GitHub Userprofile API only returns an email address if the profile - # has a public email address set (despite us asking for user:email, this behaviour + # has a public email address set (despite us asking for user:email, this behavior # doesn't change.). So we fetch all the user's email addresses emails = client.get_github_emails(token) for email in emails: diff --git a/authentik/stages/authenticator/models.py b/authentik/stages/authenticator/models.py index 428623f4f0..ef4f4b34b0 100644 --- a/authentik/stages/authenticator/models.py +++ b/authentik/stages/authenticator/models.py @@ -291,7 +291,7 @@ class VerifyNotAllowed: class ThrottlingMixin(models.Model): """ - Mixin class for models that want throttling behaviour. + Mixin class for models that want throttling behavior. This implements exponential back-off for verifying tokens. Subclasses must implement :meth:`get_throttle_factor`, and must use the diff --git a/authentik/stages/authenticator_sms/tests.py b/authentik/stages/authenticator_sms/tests.py index b7c944e31f..15d2c7e4a6 100644 --- a/authentik/stages/authenticator_sms/tests.py +++ b/authentik/stages/authenticator_sms/tests.py @@ -362,7 +362,7 @@ class AuthenticatorSMSStageTests(FlowTestCase): class TestSMSDeviceThrottling(ThrottlingTestMixin, TestCase): - """Test ThrottlingMixin behaviour on SMSDevice.verify_token""" + """Test ThrottlingMixin behavior on SMSDevice.verify_token""" def setUp(self): super().setUp() diff --git a/authentik/stages/invitation/stage.py b/authentik/stages/invitation/stage.py index 451840bd3a..fc1bf082ef 100644 --- a/authentik/stages/invitation/stage.py +++ b/authentik/stages/invitation/stage.py @@ -18,7 +18,7 @@ PLAN_CONTEXT_INVITATION = "invitation" class InvitationStageView(StageView): - """Finalise Authentication flow by logging the user in""" + """Finalize Authentication flow by logging the user in""" def get_token(self) -> str | None: """Get token from saved get-arguments or prompt_data""" diff --git a/authentik/stages/user_delete/stage.py b/authentik/stages/user_delete/stage.py index 3ea73f1268..5feb96c422 100644 --- a/authentik/stages/user_delete/stage.py +++ b/authentik/stages/user_delete/stage.py @@ -10,7 +10,7 @@ from authentik.flows.stage import StageView class UserDeleteStageView(StageView): - """Finalise unenrollment flow by deleting the user object.""" + """Finalize unenrollment flow by deleting the user object.""" def dispatch(self, request: HttpRequest) -> HttpResponse: """Delete currently pending user""" diff --git a/authentik/stages/user_login/stage.py b/authentik/stages/user_login/stage.py index f379bbc594..4fa7b6dc72 100644 --- a/authentik/stages/user_login/stage.py +++ b/authentik/stages/user_login/stage.py @@ -50,7 +50,7 @@ class UserLoginChallengeResponse(ChallengeResponse): class UserLoginStageView(ChallengeStageView): - """Finalise Authentication flow by logging the user in""" + """Finalize Authentication flow by logging the user in""" response_class = UserLoginChallengeResponse diff --git a/authentik/stages/user_write/stage.py b/authentik/stages/user_write/stage.py index c21a85cf5f..04d718a6b0 100644 --- a/authentik/stages/user_write/stage.py +++ b/authentik/stages/user_write/stage.py @@ -30,7 +30,7 @@ PLAN_CONTEXT_USER_PATH = "user_path" class UserWriteStageView(StageView): - """Finalise Enrollment flow by creating a user object.""" + """Finalize Enrollment flow by creating a user object.""" def __init__(self, executor: FlowExecutorView, **kwargs): super().__init__(executor, **kwargs) diff --git a/internal/outpost/ak/api.go b/internal/outpost/ak/api.go index 083fd66c9c..fd3aed15a2 100644 --- a/internal/outpost/ak/api.go +++ b/internal/outpost/ak/api.go @@ -55,7 +55,7 @@ type APIController struct { instanceUUID uuid.UUID } -// NewAPIController initialise new API Controller instance from URL and API token +// NewAPIController initialize new API Controller instance from URL and API token func NewAPIController(akURL url.URL, token string) *APIController { rsp := sentry.StartSpan(context.Background(), "authentik.outposts.init") log := log.WithField("logger", "authentik.outpost.ak-api-controller") diff --git a/internal/outpost/ak/global.go b/internal/outpost/ak/global.go index 0e211c412d..e3d7dcfae7 100644 --- a/internal/outpost/ak/global.go +++ b/internal/outpost/ak/global.go @@ -60,7 +60,7 @@ func doGlobalSetup(outpost api.Outpost, globalConfig *api.Config) { }, }) if err != nil { - l.WithField("env", globalConfig.ErrorReporting.Environment).WithError(err).Warning("Failed to initialise sentry") + l.WithField("env", globalConfig.ErrorReporting.Environment).WithError(err).Warning("Failed to initialize sentry") } } } diff --git a/internal/outpost/ldap/bind/direct/direct.go b/internal/outpost/ldap/bind/direct/direct.go index e678df4bba..1e2022c649 100644 --- a/internal/outpost/ldap/bind/direct/direct.go +++ b/internal/outpost/ldap/bind/direct/direct.go @@ -24,7 +24,7 @@ func NewDirectBinder(si server.LDAPServerInstance) *DirectBinder { si: si, log: log.WithField("logger", "authentik.outpost.ldap.binder.direct"), } - db.log.Info("initialised direct binder") + db.log.Info("initialized direct binder") return db } diff --git a/internal/outpost/ldap/bind/memory/memory.go b/internal/outpost/ldap/bind/memory/memory.go index ef8b691d2b..8a8208d3ed 100644 --- a/internal/outpost/ldap/bind/memory/memory.go +++ b/internal/outpost/ldap/bind/memory/memory.go @@ -32,14 +32,14 @@ func NewSessionBinder(si server.LDAPServerInstance, oldBinder bind.Binder) *Sess if oldSb, ok := oldBinder.(*SessionBinder); ok { sb.DirectBinder = oldSb.DirectBinder sb.sessions = oldSb.sessions - sb.log.Debug("re-initialised session binder") + sb.log.Debug("re-initialized session binder") return sb } } sb.sessions = ttlcache.New(ttlcache.WithDisableTouchOnHit[Credentials, ldap.LDAPResultCode]()) sb.DirectBinder = *direct.NewDirectBinder(si) go sb.sessions.Start() - sb.log.Debug("initialised session binder") + sb.log.Debug("initialized session binder") return sb } diff --git a/internal/outpost/ldap/search/memory/memory.go b/internal/outpost/ldap/search/memory/memory.go index 7d46a66d9f..ee57fd9c7f 100644 --- a/internal/outpost/ldap/search/memory/memory.go +++ b/internal/outpost/ldap/search/memory/memory.go @@ -42,12 +42,12 @@ func NewMemorySearcher(si server.LDAPServerInstance, existing search.Searcher) * if ems, ok := existing.(*MemorySearcher); ok { ems.si = si ems.fetch() - ems.log.Debug("re-initialised memory searcher") + ems.log.Debug("re-initialized memory searcher") return ems } } ms.fetch() - ms.log.Debug("initialised memory searcher") + ms.log.Debug("initialized memory searcher") return ms } diff --git a/packages/ak-common/src/arbiter.rs b/packages/ak-common/src/arbiter.rs index 1e92e20dcf..9f4c0a4d6c 100644 --- a/packages/ak-common/src/arbiter.rs +++ b/packages/ak-common/src/arbiter.rs @@ -210,7 +210,7 @@ impl Arbiter { /// Consumers listening on this must also listen on [`Arbiter::graceful_shutdown`], as only one /// of those is set upon shutdown. /// - /// It is also possible to use [`Arbiter::shutdown`] when the behaviour is the same between a + /// It is also possible to use [`Arbiter::shutdown`] when the behavior is the same between a /// fast and a graceful shutdown. pub fn fast_shutdown(&self) -> WaitForCancellationFuture<'_> { self.fast_shutdown.cancelled() @@ -221,7 +221,7 @@ impl Arbiter { /// Consumers listening on this must also listen on [`Arbiter::fast_shutdown`], as only one /// of those is set upon shutdown. /// - /// It is also possible to use [`Arbiter::shutdown`] when the behaviour is the same between a + /// It is also possible to use [`Arbiter::shutdown`] when the behavior is the same between a /// fast and a graceful shutdown. pub fn graceful_shutdown(&self) -> WaitForCancellationFuture<'_> { self.graceful_shutdown.cancelled() diff --git a/packages/client-go/model_ldap_outpost_config.go b/packages/client-go/model_ldap_outpost_config.go index 5999a1d89c..73eee24804 100644 --- a/packages/client-go/model_ldap_outpost_config.go +++ b/packages/client-go/model_ldap_outpost_config.go @@ -28,7 +28,7 @@ type LDAPOutpostConfig struct { BindFlowSlug string `json:"bind_flow_slug"` // Get slug for unbind flow, defaulting to brand's default flow. UnbindFlowSlug NullableString `json:"unbind_flow_slug"` - // Prioritise backchannel slug over direct application slug + // Prioritize backchannel slug over direct application slug ApplicationSlug string `json:"application_slug"` Certificate NullableString `json:"certificate,omitempty"` TlsServerName *string `json:"tls_server_name,omitempty"` diff --git a/packages/client-rust/src/models/ldap_outpost_config.rs b/packages/client-rust/src/models/ldap_outpost_config.rs index cae97c78c7..b97e9f96ca 100644 --- a/packages/client-rust/src/models/ldap_outpost_config.rs +++ b/packages/client-rust/src/models/ldap_outpost_config.rs @@ -25,7 +25,7 @@ pub struct LdapOutpostConfig { /// Get slug for unbind flow, defaulting to brand's default flow. #[serde(rename = "unbind_flow_slug", deserialize_with = "Option::deserialize")] pub unbind_flow_slug: Option, - /// Prioritise backchannel slug over direct application slug + /// Prioritize backchannel slug over direct application slug #[serde(rename = "application_slug")] pub application_slug: String, #[serde( diff --git a/packages/client-ts/src/models/LDAPOutpostConfig.ts b/packages/client-ts/src/models/LDAPOutpostConfig.ts index 0ca156ee92..3cb967deeb 100644 --- a/packages/client-ts/src/models/LDAPOutpostConfig.ts +++ b/packages/client-ts/src/models/LDAPOutpostConfig.ts @@ -52,7 +52,7 @@ export interface LDAPOutpostConfig { */ readonly unbindFlowSlug: string | null; /** - * Prioritise backchannel slug over direct application slug + * Prioritize backchannel slug over direct application slug * @type {string} * @memberof LDAPOutpostConfig */ diff --git a/schema.yml b/schema.yml index e024c64ea8..37e0cf251f 100644 --- a/schema.yml +++ b/schema.yml @@ -41922,7 +41922,7 @@ components: readOnly: true application_slug: type: string - description: Prioritise backchannel slug over direct application slug + description: Prioritize backchannel slug over direct application slug readOnly: true certificate: type: string From 519a4d73c4160a95ea594fcb5e0a81a6045e459b Mon Sep 17 00:00:00 2001 From: "Jens L." Date: Mon, 8 Jun 2026 15:24:22 +0200 Subject: [PATCH 07/68] blueprints: handle integrity exception when applying blueprints (#22599) this can happen when the server/worker are starting and you also try to apply blueprints with `ak apply_blueprint`, as seen in https://github.com/goauthentik/action-setup-authentik --- authentik/blueprints/v1/importer.py | 40 ++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/authentik/blueprints/v1/importer.py b/authentik/blueprints/v1/importer.py index 4e66d7d293..26e46d0791 100644 --- a/authentik/blueprints/v1/importer.py +++ b/authentik/blueprints/v1/importer.py @@ -323,6 +323,42 @@ class Importer: serializer.instance = model_instance return serializer + def _save_with_retry( + self, serializer: BaseSerializer, entry: BlueprintEntry, raise_errors: bool + ) -> Model | None: + """Save a serializer, retrying once on IntegrityError by re-fetching the existing instance. + + Returns the saved instance, or None when recovery failed and raise_errors is False. + Raises EntryInvalidError / IntegrityError when raise_errors is True and recovery + is not possible. + """ + try: + with atomic(): + return serializer.save() + except IntegrityError: + self.logger.debug( + "Integrity error during save, retrying after re-fetching instance", + entry=entry, + ) + # Race condition: another process committed the same object between our + # SELECT and INSERT. Re-validate so we pick up the now-existing instance. + try: + retry_serializer = self._validate_single(entry) + except EntryInvalidError as exc: + self.logger.warning(f"Entry invalid on retry: {exc}", entry=entry, error=exc) + if raise_errors: + raise exc + return None + if not retry_serializer: + return None + try: + return retry_serializer.save() + except IntegrityError: + self.logger.warning("Integrity error persists on retry", entry=entry) + if raise_errors: + raise + return None + def _apply_permissions(self, instance: Model, entry: BlueprintEntry): """Apply object-level permissions for an entry""" for perm in entry.get_permissions(self._import): @@ -393,7 +429,9 @@ class Importer: pk=instance.pk, ) else: - instance = serializer.save() + instance = self._save_with_retry(serializer, entry, raise_errors) + if instance is None: + return False self.logger.debug("Updated model", model=instance) if "pk" in entry.identifiers: self.__pk_map[entry.identifiers["pk"]] = instance.pk From 7fc325fbf51e46172fa190b05928253b07dc9691 Mon Sep 17 00:00:00 2001 From: "authentik-automation[bot]" <135050075+authentik-automation[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 17:39:35 +0200 Subject: [PATCH 08/68] core, web: update translations (#22871) 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> --- locale/fr_FR/LC_MESSAGES/django.mo | Bin 129061 -> 129791 bytes locale/hu_HU/LC_MESSAGES/django.mo | Bin 0 -> 131395 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 locale/hu_HU/LC_MESSAGES/django.mo diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index 3ecd53392ffe5187e4924bfcdd3e867370675c1a..a5c785db04bebc6d6e45005928f9b59a16f79d78 100644 GIT binary patch delta 24597 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 delta 23982 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 JZ(X0g{||lCbxHsL diff --git a/locale/hu_HU/LC_MESSAGES/django.mo b/locale/hu_HU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f5fc6a7d076a2c087d37dc5759f42a933edc0e38 GIT binary patch literal 131395 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 SFikc&h!b!rCudO>{Qm<4ARaOR literal 0 HcmV?d00001 From 3e0d1ddb10f26b8fa2255179cb3d6c8479800a0e Mon Sep 17 00:00:00 2001 From: NiceDevil <17103076+nicedevil007@users.noreply.github.com> Date: Mon, 8 Jun 2026 17:41:28 +0200 Subject: [PATCH 09/68] web/elements/ak-dual-select: fix inverted pagination arrow colors in dark theme (#22608) The dark theme overrides in ak-pagination assigned the disabled color variable to the active button and the active color variable to the overridden disabled-color custom property. As a result, the active arrow appeared muted and the disabled arrow appeared highlighted on the first and last pages of paginated lists. Swap the two values so the active arrow uses the m-plain color and the disabled custom property keeps the m-plain disabled color. Closes #22607 Co-authored-by: nicedevil007 --- web/src/elements/ak-dual-select/components/ak-pagination.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/elements/ak-dual-select/components/ak-pagination.ts b/web/src/elements/ak-dual-select/components/ak-pagination.ts index ebafbd2555..96d42c6bcc 100644 --- a/web/src/elements/ak-dual-select/components/ak-pagination.ts +++ b/web/src/elements/ak-dual-select/components/ak-pagination.ts @@ -18,8 +18,8 @@ export class AkPagination extends CustomEmitterElement(AKEl css` :host([theme="dark"]) { .pf-c-pagination__nav-control .pf-c-button { - color: var(--pf-c-button--m-plain--disabled--Color); - --pf-c-button--disabled--Color: var(--pf-c-button--m-plain--Color); + color: var(--pf-c-button--m-plain--Color); + --pf-c-button--disabled--Color: var(--pf-c-button--m-plain--disabled--Color); } .pf-c-pagination__nav-control .pf-c-button:disabled { From c5028c88a5eac5229199f7256210c49decb3ecf4 Mon Sep 17 00:00:00 2001 From: Ken Sternberg <133134217+kensternberg-authentik@users.noreply.github.com> Date: Mon, 8 Jun 2026 09:20:45 -0700 Subject: [PATCH 10/68] web/maintenance: eliminate the need for DEFAULT_CONFIG boilerplate everywhere (#22892) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ## What window.authentik.flow = { "layout": "{{ flow.layout }}", + "background": "{{ flow.background }}", + "title": "{{ flow.title }}", }; Amends the `flow.html` template and `GlobalAuthentik` parser to include new parameters, `background` and `title`, in the flow-specific part of the configuration written to the HTML `` object, and to provide those parameters to client code. ## Why The `layout` is start-up critical: it tells the Flow interface how the admin wants the Flow page to look, and allows the HTML and CSS to be pre-aligned to that condition. `layout` is determined on a per-Flow bases, not a per-Stage basis; Flows are derived from a tuple of `(Brand, Application?)`, where the opening policy *may* direct a user to a different flow if the user reached authentik via a redirect from a specific application, but will otherwise fall back to the default Flow for the Brand. The `background` is a field that is required if the `Flow`’s layout is of type `frame_background`; in this case, the part of the viewport not dedicated to the FlowExecutor is reserved for an ` @@ -306,8 +324,13 @@ export class CaptchaStage // Then, load the new script... const scriptElement = document.createElement("script"); + const matchedController = Array.from(CaptchaStage.controllers).find((Controller) => + Controller.matchesURL(challengeURL), + ); scriptElement.src = challengeURL.toString(); + scriptElement.type = + matchedController?.scriptType === "module" ? "module" : "text/javascript"; scriptElement.async = true; scriptElement.defer = true; scriptElement.onload = this.#scriptLoadListener; @@ -528,6 +551,7 @@ export class CaptchaStage challengeURL: challengeURL.toString(), theme: this.activeTheme, scriptOnLoad: !(controller instanceof TurnstileController), + scriptType: controller.scriptType, }); if ( diff --git a/web/src/flow/stages/captcha/controllers/CaptchaController.ts b/web/src/flow/stages/captcha/controllers/CaptchaController.ts index 6da5320f84..6c0c2820d6 100644 --- a/web/src/flow/stages/captcha/controllers/CaptchaController.ts +++ b/web/src/flow/stages/captcha/controllers/CaptchaController.ts @@ -28,6 +28,20 @@ export abstract class CaptchaController implements ReactiveController { return (this.constructor as typeof CaptchaController).globalName; } + public static readonly scriptType: "classic" | "module" = "classic"; + + public get scriptType(): "classic" | "module" { + return (this.constructor as typeof CaptchaController).scriptType; + } + + public static isAvailable(): boolean { + return Object.hasOwn(window, this.globalName); + } + + public static matchesURL(_url: URL): boolean { + return false; + } + /** * A prefix for log messages from this controller. */ @@ -42,7 +56,7 @@ export abstract class CaptchaController implements ReactiveController { ): Array { return Array.from(controllerConstructors).filter((Controller) => { // Can we find the global for this captcha provider? - return Object.hasOwn(window, Controller.globalName); + return Controller.isAvailable(); }); } @@ -98,6 +112,9 @@ export abstract class CaptchaController implements ReactiveController { export type CaptchaControllerConstructor = { globalName: string; + scriptType: "classic" | "module"; + isAvailable: () => boolean; + matchesURL: (url: URL) => boolean; } & (new (host: CaptchaHandlerHost) => CaptchaController); export interface CaptchaHandlerHost extends ReactiveControllerHost { diff --git a/web/src/flow/stages/captcha/controllers/cap.ts b/web/src/flow/stages/captcha/controllers/cap.ts new file mode 100644 index 0000000000..47dfaa3f81 --- /dev/null +++ b/web/src/flow/stages/captcha/controllers/cap.ts @@ -0,0 +1,61 @@ +import { CaptchaController } from "#flow/stages/captcha/controllers/CaptchaController"; + +import { html } from "lit"; + +export function isCapWidgetURL(url: URL): boolean { + return url.pathname.includes("cap-widget") || url.pathname.endsWith("/assets/widget.js"); +} + +export class CapController extends CaptchaController { + public static readonly globalName = "cap-widget"; + + public static readonly scriptType = "module"; + + public static override isAvailable(): boolean { + return customElements.get("cap-widget") !== undefined; + } + + public static override matchesURL(url: URL): boolean { + return isCapWidgetURL(url); + } + + public interactive = () => { + const endpoint = this.host.challenge?.siteKey ?? ""; + + return html`
+ +
+ `; + }; + + public refreshInteractive = async () => { + this.host.iframeRef.value?.contentWindow?.location.reload(); + }; + + public execute = async () => { + throw new Error("Cap requires interactive mode."); + }; + + public refresh = async () => { + throw new Error("Cap requires interactive mode."); + }; +} diff --git a/web/src/flow/stages/captcha/shared.ts b/web/src/flow/stages/captcha/shared.ts index 5245809e7f..a3613aa421 100644 --- a/web/src/flow/stages/captcha/shared.ts +++ b/web/src/flow/stages/captcha/shared.ts @@ -30,6 +30,7 @@ export interface IFrameTemplateInit { * Defaults to `true`. */ scriptOnLoad?: boolean; + scriptType?: "classic" | "module"; } /** @@ -42,7 +43,7 @@ export interface IFrameTemplateInit { */ export function iframeTemplate( children: TemplateResult, - { challengeURL, theme, scriptOnLoad = true }: IFrameTemplateInit, + { challengeURL, theme, scriptOnLoad = true, scriptType = "classic" }: IFrameTemplateInit, ) { return createDocumentTemplate({ head: html` @@ -75,7 +76,7 @@ export function iframeTemplate( ${children} `, diff --git a/web/src/flow/stages/identification/controllers/CaptchaDisplayController.ts b/web/src/flow/stages/identification/controllers/CaptchaDisplayController.ts index b77691567d..918db04736 100644 --- a/web/src/flow/stages/identification/controllers/CaptchaDisplayController.ts +++ b/web/src/flow/stages/identification/controllers/CaptchaDisplayController.ts @@ -49,6 +49,12 @@ export class CaptchaDisplayController implements ReactiveController { const input = this.#inputRef.value; if (!input) return; input.value = token; + // The surrounding identification form only updates its validity when form controls + // emit normal input events, so mirror a user's field change after the CAPTCHA solves. + input.dispatchEvent(new Event("input", { bubbles: true, composed: true })); + input.dispatchEvent(new Event("change", { bubbles: true, composed: true })); + this.#loaded = true; + this.host.requestUpdate(); }; public onFailure() { diff --git a/website/docs/add-secure-apps/flows-stages/stages/captcha/index.md b/website/docs/add-secure-apps/flows-stages/stages/captcha/index.md index 3f65660a9c..79ef5679e6 100644 --- a/website/docs/add-secure-apps/flows-stages/stages/captcha/index.md +++ b/website/docs/add-secure-apps/flows-stages/stages/captcha/index.md @@ -2,7 +2,7 @@ title: Captcha stage --- -The Captcha stage adds CAPTCHA verification to a flow by using Google reCAPTCHA or compatible alternatives like hCaptcha and Cloudflare Turnstile. +The Captcha stage adds CAPTCHA verification to a flow by using Google reCAPTCHA or compatible alternatives like hCaptcha, Cloudflare Turnstile, and Cap. ## Overview @@ -20,6 +20,7 @@ It can either be bound to a flow or embedded inside the [Identification stage](. - **Error on invalid score**: show an error immediately when the score is outside the configured threshold. If disabled, the flow continues and policies can inspect the result from context. - **JS URL**: JavaScript loader URL for the provider. - **API URL**: verification endpoint URL for the provider. +- **Request content type**: content type used when authentik verifies the CAPTCHA token with the provider. ## Flow integration @@ -55,6 +56,25 @@ Recommended values: Score thresholds only apply to hCaptcha Enterprise. +### Cap + +Cap is a self-hostable CAPTCHA server that uses proof-of-work challenges. + +See https://trycap.dev/guide/. + +authentik supports Cap's default widget. The floating widget is not supported. + +Recommended values: + +- **Public key**: public Cap endpoint for the site key path, for example `https://cap.example.com/site-key/` +- **Private key**: Cap secret key +- **Interactive**: enabled +- **JS URL**: self-hosted Cap widget asset, for example `https://cap.example.com/assets/widget.js`. If you use a CDN, pin a reviewed release such as `https://cdn.jsdelivr.net/npm/cap-widget@` instead of the unversioned package URL. See [Cap releases](https://github.com/tiagozip/cap/releases). +- **API URL**: Cap verification endpoint, for example `https://cap.example.com/site-key/siteverify` +- **Request content type**: JSON + +Cap does not use score thresholds. + ### Cloudflare Turnstile See https://developers.cloudflare.com/turnstile/get-started/migrating-from-recaptcha. From ab1f8a06924f4324efa1cae9c1a02f8d9082a538 Mon Sep 17 00:00:00 2001 From: Connor Peshek Date: Thu, 11 Jun 2026 11:20:17 -0500 Subject: [PATCH 66/68] website/integrations: Update nextcloud to support post logout redirect uri (#22989) --- .../chat-communication-collaboration/nextcloud/index.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/integrations/chat-communication-collaboration/nextcloud/index.mdx b/website/integrations/chat-communication-collaboration/nextcloud/index.mdx index 1601cad068..04dbde3697 100644 --- a/website/integrations/chat-communication-collaboration/nextcloud/index.mdx +++ b/website/integrations/chat-communication-collaboration/nextcloud/index.mdx @@ -122,7 +122,8 @@ To connect to an existing Nextcloud user, set the `nextcloud_user_id` attribute - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://nextcloud.company/apps/user_oidc/code`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://nextcloud.company/apps/user_oidc/code`. + - Add a **Redirect URI** of type `Strict` `Post Logout` as `https://nextcloud.company`. - Select any available signing key. - Under **Advanced protocol settings**: - _(optional)_ If you created the `Nextcloud Profile` scope mapping, add it to **Selected Scopes**. From 783859d3c87fe0fee108465f00fe3e52c94c57f3 Mon Sep 17 00:00:00 2001 From: Connor Peshek Date: Thu, 11 Jun 2026 11:58:23 -0500 Subject: [PATCH 67/68] websites/integrations: specify redirect uri of type authorization or post logout (#22981) * docs/integrations: Update docs to specify redirect uri of type authorization or post logout * bold redirect uri * improve wording * update docs * add banner for warning of redirect uri's * Update website/integrations/_redirect-uri-2026-5-note.mdx Signed-off-by: Dewi Roberts --------- Signed-off-by: Connor Peshek Signed-off-by: Dewi Roberts Co-authored-by: Dewi Roberts --- .../docs/install-config/first-steps/index.mdx | 2 +- .../_redirect-uri-2026-5-note.mdx | 3 +++ .../affine/index.md | 6 +++++- .../chatgpt/index.mdx | 7 +++++-- .../espo-crm/index.md | 6 +++++- .../grommunio/index.md | 6 +++++- .../hedgedoc/index.md | 6 +++++- .../kanboard/index.md | 6 +++++- .../mailcow-logs-viewer/index.md | 6 +++++- .../mailcow/index.md | 6 +++++- .../mastodon/index.md | 6 +++++- .../matrix-synapse/index.md | 6 +++++- .../mattermost-team-edition/index.mdx | 5 ++++- .../mobilizon/index.md | 6 +++++- .../nextcloud/index.mdx | 3 +++ .../opencloud/index.mdx | 21 +++++++++++-------- .../openproject/index.md | 6 +++++- .../owncloud/index.md | 14 ++++++++----- .../planka/index.mdx | 6 +++++- .../rocketchat/index.md | 6 +++++- .../roundcube/index.md | 6 +++++- .../sharepoint-se/index.md | 6 +++++- .../vikunja/index.mdx | 7 +++++-- .../wekan/index.mdx | 6 +++++- .../writefreely/index.md | 6 +++++- .../cloud-providers/aws-classic/index.mdx | 5 ++++- .../cloud-providers/digitalocean/index.md | 6 +++++- .../cloud-providers/oracle-cloud/index.md | 6 +++++- .../integrations/dashboards/dashy/index.md | 6 +++++- .../integrations/dashboards/homarr/index.md | 6 +++++- .../dashboards/linkwarden/index.md | 6 +++++- .../integrations/development/coder/index.md | 6 +++++- .../integrations/development/engomo/index.mdx | 6 +++++- .../integrations/development/forgejo/index.md | 6 +++++- .../integrations/development/frappe/index.md | 6 +++++- .../integrations/development/gitea/index.md | 6 +++++- .../integrations/development/gitlab/index.mdx | 6 +++++- .../development/gravitee/index.md | 6 +++++- .../integrations/development/jenkins/index.md | 6 +++++- .../development/node-red/index.md | 6 +++++- .../device-management/apple/index.md | 6 +++++- .../device-management/meshcentral/index.md | 6 +++++- .../omnissa-workspace-one-access/index.md | 8 +++++-- .../documentation/bookstack/index.mdx | 5 ++++- .../documentation/dokuwiki/index.md | 4 ++++ .../documentation/karakeep/index.md | 6 +++++- .../documentation/kitchenowl/index.md | 6 +++++- .../documentation/mealie/index.md | 6 +++++- .../documentation/netbox/index.md | 6 +++++- .../documentation/outline/index.md | 6 +++++- .../documentation/paperless-ngx/index.mdx | 6 +++++- .../documentation/papra/index.mdx | 6 +++++- .../documentation/tandoor/index.md | 6 +++++- .../documentation/wiki-js/index.md | 6 +++++- .../hypervisors-orchestrators/arcane/index.md | 6 +++++- .../portainer/index.md | 6 +++++- .../proxmox-ve/index.md | 6 +++++- .../vmware-cloud-director/index.md | 6 +++++- .../vmware-vcenter/index.md | 6 +++++- .../xen-orchestra/index.md | 6 +++++- .../infrastructure/apache-guacamole/index.mdx | 5 ++++- .../infrastructure/argocd/index.md | 6 +++++- .../infrastructure/harbor/index.md | 6 +++++- .../infrastructure/keycloak/index.mdx | 5 ++++- .../infrastructure/komodo/index.mdx | 6 +++++- .../infrastructure/minio/index.mdx | 5 ++++- .../infrastructure/nexterm/index.md | 6 +++++- .../infrastructure/osticket/index.md | 6 +++++- .../infrastructure/pgadmin/index.md | 6 +++++- .../infrastructure/plesk/index.md | 6 +++++- .../infrastructure/rabbitmq/index.mdx | 5 ++++- .../infrastructure/rustdesk-pro/index.mdx | 6 +++++- .../infrastructure/semaphore/index.mdx | 6 +++++- .../infrastructure/synology-dsm/index.md | 6 +++++- .../infrastructure/termix/index.mdx | 6 +++++- .../infrastructure/terrakube/index.md | 6 +++++- .../infrastructure/zammad/index.md | 5 ++++- .../infrastructure/zendesk/index.mdx | 5 ++++- .../integrations/infrastructure/zot/index.md | 8 ++++--- .../learning/absorb-lms/index.mdx | 5 ++++- .../media/audiobookshelf/index.md | 4 ++++ website/integrations/media/freshrss/index.mdx | 6 +++++- website/integrations/media/immich/index.md | 6 +++++- website/integrations/media/jellyfin/index.md | 6 +++++- website/integrations/media/komga/index.md | 6 +++++- website/integrations/media/miniflux/index.md | 6 +++++- .../integrations/media/photoprism/index.md | 6 +++++- website/integrations/media/seafile/index.md | 6 +++++- website/integrations/media/seerr/index.md | 6 +++++- .../miscellaneous/actual-budget/index.mdx | 5 ++++- .../miscellaneous/adventurelog/index.mdx | 6 +++++- .../miscellaneous/ezbookkeeping/index.mdx | 5 ++++- .../miscellaneous/filerise/index.mdx | 6 +++++- .../miscellaneous/home-assistant/index.md | 8 +++++-- .../miscellaneous/open-webui/index.md | 6 +++++- .../miscellaneous/wallos/index.mdx | 6 +++++- .../miscellaneous/zipline/index.md | 6 +++++- .../integrations/monitoring/beszel/index.mdx | 6 +++++- .../monitoring/chronograf/index.mdx | 6 +++++- .../integrations/monitoring/gatus/index.mdx | 6 +++++- .../monitoring/glitchtip/index.md | 6 +++++- .../integrations/monitoring/grafana/index.mdx | 6 +++++- .../integrations/monitoring/icinga/index.md | 6 +++++- .../monitoring/observium/index.md | 6 +++++- .../integrations/monitoring/pulse/index.md | 6 +++++- .../monitoring/ubuntu-landscape/index.md | 6 +++++- .../monitoring/whats-up-docker/index.md | 6 +++++- .../integrations/networking/firezone/index.md | 6 +++++- .../integrations/networking/gravity/index.md | 6 +++++- .../networking/headscale/index.md | 6 +++++- .../integrations/networking/hoop.dev/index.md | 6 +++++- .../integrations/networking/netbird/index.mdx | 9 +++++--- .../networking/pangolin/index.mdx | 8 +++++-- .../networking/tailscale/index.md | 6 +++++- .../networking/technitium/index.md | 6 +++++- .../integrations/platforms/budibase/index.md | 6 +++++- .../integrations/platforms/drupal/index.md | 6 +++++- .../integrations/platforms/personio/index.md | 6 +++++- .../platforms/pocketbase/index.md | 6 +++++- .../integrations/platforms/wordpress/index.md | 6 +++++- .../integrations/security/1password/index.mdx | 6 +++++- .../integrations/security/bitwarden/index.mdx | 15 +++++++------ .../security/cloudflare-access/index.md | 6 +++++- .../security/hashicorp-vault/index.md | 6 +++++- .../security/vaultwarden/index.md | 6 +++++- .../integrations/security/xcreds/index.mdx | 6 +++++- 126 files changed, 627 insertions(+), 148 deletions(-) create mode 100644 website/integrations/_redirect-uri-2026-5-note.mdx diff --git a/website/docs/install-config/first-steps/index.mdx b/website/docs/install-config/first-steps/index.mdx index 25f0f1e0ed..e07e6d0ffe 100644 --- a/website/docs/install-config/first-steps/index.mdx +++ b/website/docs/install-config/first-steps/index.mdx @@ -102,7 +102,7 @@ Every application that you add to authentik requires a provider, which is used t authorization, etc. - **Protocol settings**: provide the following required configurations: - Note the **Client ID**, **Client Secret**, and **Slug** values because they will be required later when you configure Grafana to use authentik. - - Set the **Redirect URI** as a `Strict` redirect to `https://grafana.company/login/generic_oauth`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://grafana.company/login/generic_oauth`. - TIP: The Redirect URI is where a user is directed to, as soon as authentik's authorization flow is successfully completed. - **Grant Types** (required): Select at least one [grant type](../../add-secure-apps/providers/oauth2/#oauth-20-flows-and-grant-types) that the provider can use. diff --git a/website/integrations/_redirect-uri-2026-5-note.mdx b/website/integrations/_redirect-uri-2026-5-note.mdx new file mode 100644 index 0000000000..309aa5dc3f --- /dev/null +++ b/website/integrations/_redirect-uri-2026-5-note.mdx @@ -0,0 +1,3 @@ +:::info Redirect URI changes in authentik 2026.5 +In authentik versions earlier than 2026.5, all **Redirect URIs** are automatically treated as `Authorization` type. If you are using one of these older authentik versions, add only the `Authorization` URL to your **Redirect URIs** and do not configure a `Post Logout` URI. +::: diff --git a/website/integrations/chat-communication-collaboration/affine/index.md b/website/integrations/chat-communication-collaboration/affine/index.md index 62d37b65e3..260489d9b8 100644 --- a/website/integrations/chat-communication-collaboration/affine/index.md +++ b/website/integrations/chat-communication-collaboration/affine/index.md @@ -4,6 +4,8 @@ sidebar_label: AFFiNE support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is AFFiNE? > AFFiNE is an open-source, self-hostable workspace for documents, whiteboards, and databases. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of AFFiNE with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of AFFiNE with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Add one `Strict` redirect URI and set it to `https://affine.company/oauth/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://affine.company/oauth/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/chatgpt/index.mdx b/website/integrations/chat-communication-collaboration/chatgpt/index.mdx index 8108314f42..427cccdcd9 100644 --- a/website/integrations/chat-communication-collaboration/chatgpt/index.mdx +++ b/website/integrations/chat-communication-collaboration/chatgpt/index.mdx @@ -4,6 +4,7 @@ sidebar_label: ChatGPT support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import SAMLProvider20265Warning from "../../_saml-provider-2026-5-warning.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -38,6 +39,8 @@ You can configure ChatGPT to use either OIDC or SAML; this guide explains both o ## authentik configuration + + To support the integration of ChatGPT with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -48,7 +51,7 @@ To support the integration of ChatGPT with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Temporarily set a `Strict` redirect URI to `https://temp.temp`. + - Temporarily add a **Redirect URI** of type `Strict` `Authorization` as `https://temp.temp`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. @@ -77,7 +80,7 @@ ChatGPT only enables the **Manage SSO** wizard after you verify ownership of you 1. Log in to authentik as an administrator and open the authentik Admin interface. 2. Navigate to **Applications** > **Providers** and click the **Edit** icon of the newly created ChatGPT provider. -3. Under **Protocol settings**, set the **Redirect URIs** to the **Login redirect URI** from ChatGPT. +3. Under **Protocol settings**, add a **Redirect URI** of type `Strict` `Authorization` as the **Login redirect URI** value from ChatGPT. 4. Click **Update**. diff --git a/website/integrations/chat-communication-collaboration/espo-crm/index.md b/website/integrations/chat-communication-collaboration/espo-crm/index.md index f497fdb616..072cab9d27 100644 --- a/website/integrations/chat-communication-collaboration/espo-crm/index.md +++ b/website/integrations/chat-communication-collaboration/espo-crm/index.md @@ -4,6 +4,8 @@ sidebar_label: EspoCRM support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is EspoCRM? > EspoCRM is a CRM (customer relationship management) web application that allows users to store, visualize, and analyze their company's business-related relationships such as opportunities, people, businesses, and projects. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of EspoCRM with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -37,7 +41,7 @@ To support the integration of EspoCRM with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://espocrm.company/oauth-callback.php`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://espocrm.company/oauth-callback.php`. - Select any available signing key. - Under **Advanced protocol settings**, set **Subject mode** to **Based on the User's username**. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/grommunio/index.md b/website/integrations/chat-communication-collaboration/grommunio/index.md index 3671d94f37..052a2a2eb9 100644 --- a/website/integrations/chat-communication-collaboration/grommunio/index.md +++ b/website/integrations/chat-communication-collaboration/grommunio/index.md @@ -4,6 +4,8 @@ sidebar_label: grommunio support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is grommunio? @@ -25,6 +27,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To integrate authentik with grommunio, you will need to create an application and provider pair in authentik. :::info Keycloak-compatible endpoints @@ -39,7 +43,7 @@ grommunio-web expects Keycloak-compatible OIDC endpoints. Because authentik does - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name, the authorization flow to use, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://grommunio.company/web`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://grommunio.company/web`. - Set **Signing Key** to an available RSA key. - Under **Advanced protocol settings**: - Add the `authentik default OAuth Mapping: OpenID 'offline_access'` scope to **Selected Scopes**. diff --git a/website/integrations/chat-communication-collaboration/hedgedoc/index.md b/website/integrations/chat-communication-collaboration/hedgedoc/index.md index b4e41f8dab..50883c1ca1 100644 --- a/website/integrations/chat-communication-collaboration/hedgedoc/index.md +++ b/website/integrations/chat-communication-collaboration/hedgedoc/index.md @@ -4,6 +4,8 @@ sidebar_label: HedgeDoc support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is HedgeDoc? > HedgeDoc lets you create real-time collaborative markdown notes. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of HedgeDoc with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of HedgeDoc with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://hedgedoc.company/auth/oauth2/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://hedgedoc.company/auth/oauth2/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. 3. Click **Submit** to save the new application and provider. diff --git a/website/integrations/chat-communication-collaboration/kanboard/index.md b/website/integrations/chat-communication-collaboration/kanboard/index.md index b204eca231..389713f351 100644 --- a/website/integrations/chat-communication-collaboration/kanboard/index.md +++ b/website/integrations/chat-communication-collaboration/kanboard/index.md @@ -4,6 +4,8 @@ sidebar_label: Kanboard support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Kanboard? > Kanboard is a free and open source Kanban project management software. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Kanboard with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Kanboard with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://kanboard.company/oauth/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://kanboard.company/oauth/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/mailcow-logs-viewer/index.md b/website/integrations/chat-communication-collaboration/mailcow-logs-viewer/index.md index 609173069d..9f30192c53 100644 --- a/website/integrations/chat-communication-collaboration/mailcow-logs-viewer/index.md +++ b/website/integrations/chat-communication-collaboration/mailcow-logs-viewer/index.md @@ -4,6 +4,8 @@ sidebar_label: mailcow Logs Viewer support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is mailcow Logs Viewer? > A modern, self-hosted dashboard for monitoring, analyzing, and managing your mailcow mail server. Track email delivery, investigate spam, manage quarantine, detect bounce-based abuse, and validate DNS configurations, all from a single interface. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of mailcow Logs Viewer with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of mailcow Logs Viewer with authentik, you need to cr - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **application slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://mailcow-logs-viewer.company/api/auth/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://mailcow-logs-viewer.company/api/auth/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/mailcow/index.md b/website/integrations/chat-communication-collaboration/mailcow/index.md index d5fe636eb3..1fcdc73dc4 100644 --- a/website/integrations/chat-communication-collaboration/mailcow/index.md +++ b/website/integrations/chat-communication-collaboration/mailcow/index.md @@ -4,6 +4,8 @@ sidebar_label: mailcow support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is mailcow? > mailcow is a Dockerized, open-source groupware and email suite based on Docker. It relies on many well-known and long-used components, which, when combined, result in a comprehensive email server solution. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of mailcow with authentik, you need to create a property mapping, set the `email_verified` attribute on required users, and create an application/provider pair in authentik. ### Create a property mapping @@ -56,7 +60,7 @@ Repeat these steps for all users that need to use the Mailcow integration. - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://mailcow.company`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://mailcow.company`. - Select any available signing key. - Under **Advanced protocol settings**: - Remove the `authentik default OAuth Mapping: OpenID 'email'` scope from **Selected Scopes**. diff --git a/website/integrations/chat-communication-collaboration/mastodon/index.md b/website/integrations/chat-communication-collaboration/mastodon/index.md index 61aaa6c24b..6b2a6589e8 100644 --- a/website/integrations/chat-communication-collaboration/mastodon/index.md +++ b/website/integrations/chat-communication-collaboration/mastodon/index.md @@ -4,6 +4,8 @@ sidebar_label: Mastodon support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Mastodon? > Mastodon is free and open-source software for running self-hosted social networking services. It has microblogging features similar to Twitter @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Mastodon with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Mastodon with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://mastodon.company/auth/auth/openid_connect/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://mastodon.company/auth/auth/openid_connect/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/matrix-synapse/index.md b/website/integrations/chat-communication-collaboration/matrix-synapse/index.md index d57e7f6b50..1d79d8ac53 100644 --- a/website/integrations/chat-communication-collaboration/matrix-synapse/index.md +++ b/website/integrations/chat-communication-collaboration/matrix-synapse/index.md @@ -4,6 +4,8 @@ sidebar_label: Matrix Synapse support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Matrix Synapse? > Matrix is an open source project that publishes the Matrix open standard for secure, decentralized, real-time communication, and its Apache licensed reference implementations. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Matrix Synapse with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Matrix Synapse with authentik, you need to create - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://matrix.company/_synapse/client/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://matrix.company/_synapse/client/oidc/callback`. - Select any available RSA signing key. Matrix Synapse doesn't support ECC keys. - Do not set an encryption key because this is not supported by Matrix Synapse. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/mattermost-team-edition/index.mdx b/website/integrations/chat-communication-collaboration/mattermost-team-edition/index.mdx index 3311917e88..6ac90c4476 100644 --- a/website/integrations/chat-communication-collaboration/mattermost-team-edition/index.mdx +++ b/website/integrations/chat-communication-collaboration/mattermost-team-edition/index.mdx @@ -4,6 +4,7 @@ sidebar_label: Mattermost Team Edition support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import SAMLProvider20265Warning from "../../_saml-provider-2026-5-warning.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -45,6 +46,8 @@ Once configured, Mattermost will display a login button with the GitLab icon, bu ## authentik configuration + + To support the integration of Mattermost Team Edition with authentik, you need to create property mappings and an application/provider pair in authentik. ### Create property mappings @@ -84,7 +87,7 @@ The following `id` property mapping is optional. If omitted, Mattermost will gen - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://mattermost.company/signup/gitlab/complete`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://mattermost.company/signup/gitlab/complete`. - Select any available signing key. - Under **Advanced protocol settings**, add the scopes you just created to the list of selected scopes. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/mobilizon/index.md b/website/integrations/chat-communication-collaboration/mobilizon/index.md index 51fb0c597f..f3a190d6fe 100644 --- a/website/integrations/chat-communication-collaboration/mobilizon/index.md +++ b/website/integrations/chat-communication-collaboration/mobilizon/index.md @@ -4,6 +4,8 @@ sidebar_label: Mobilizon support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Mobilizon? > Gather, organize and mobilize yourselves with a convivial, ethical, and emancipating tool. https://joinmobilizon.org @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Mobilizon with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Mobilizon with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://mobilizon.company/auth/keycloak/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://mobilizon.company/auth/keycloak/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/nextcloud/index.mdx b/website/integrations/chat-communication-collaboration/nextcloud/index.mdx index 04dbde3697..476f1b7e38 100644 --- a/website/integrations/chat-communication-collaboration/nextcloud/index.mdx +++ b/website/integrations/chat-communication-collaboration/nextcloud/index.mdx @@ -4,6 +4,7 @@ sidebar_label: Nextcloud support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import SAMLProvider20265Warning from "../../_saml-provider-2026-5-warning.mdx"; ## What is Nextcloud? @@ -116,6 +117,8 @@ To connect to an existing Nextcloud user, set the `nextcloud_user_id` attribute ## Create an application and provider in authentik + + 1. Log in to authentik as an administrator and open the authentik Admin interface. 2. Navigate to **Applications** > **Applications** and click **New Application** to create an application and provider pair. (Alternatively you can first create a provider separately, then create the application and connect it with the provider.) - **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings. diff --git a/website/integrations/chat-communication-collaboration/opencloud/index.mdx b/website/integrations/chat-communication-collaboration/opencloud/index.mdx index 9fcfc14a12..f082bd73df 100644 --- a/website/integrations/chat-communication-collaboration/opencloud/index.mdx +++ b/website/integrations/chat-communication-collaboration/opencloud/index.mdx @@ -4,6 +4,7 @@ sidebar_label: OpenCloud support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -35,6 +36,8 @@ Choose your setup below. The **Web only** tab logs in through the browser. The * ## authentik configuration + + 1. Log in to authentik as an administrator and open the Admin interface. 2. Navigate to **Applications** > **Applications** and click **New Application**. - **Application**: provide a name and note the **slug**. @@ -43,9 +46,9 @@ Choose your setup below. The **Web only** tab logs in through the browser. The * - **Client type**: `Public` - **Client ID**: `web` - **Redirect URIs**: - - Strict: `https://opencloud.company/oidc-callback.html` - - Strict: `https://opencloud.company/oidc-silent-redirect.html` - - Strict: `https://opencloud.company/` + - `Strict` `Authorization`: `https://opencloud.company/oidc-callback.html` + - `Strict` `Authorization`: `https://opencloud.company/oidc-silent-redirect.html` + - `Strict` `Authorization`: `https://opencloud.company/` - **Signing Key**: select any available key. - **Scopes**: `openid`, `profile`, `email`. 3. Click **Submit**. @@ -112,12 +115,12 @@ With GLOBAL issuer mode enabled, tokens use an issuer of `iss = https://authenti Repeat these steps for **each** of the four clients (Web, Desktop, Android, and iOS), using the per-client values from the table below. -| Client | Client ID | Redirect URIs | -| ------- | ------------------ | ------------------------------------------------------------------------------------------- | -| Web | `web` | Strict: `https://opencloud.company/oidc-callback.html`, `…/oidc-silent-redirect.html`, `…/` | -| Desktop | `OpenCloudDesktop` | Regex: `http://127.0.0.1(:[0-9]+)?(/.*)?` and `http://localhost(:[0-9]+)?(/.*)?` | -| Android | `OpenCloudAndroid` | Strict: `oc://android.opencloud.eu` | -| iOS | `OpenCloudIOS` | Strict: `oc://ios.opencloud.eu` | +| Client | Client ID | Redirect URIs | +| ------- | ------------------ | ------------------------------------------------------------------------------------------------------------- | +| Web | `web` | `Strict` `Authorization`: `https://opencloud.company/oidc-callback.html`, `…/oidc-silent-redirect.html`, `…/` | +| Desktop | `OpenCloudDesktop` | `Regex` `Authorization`: `http://127.0.0.1(:[0-9]+)?(/.*)?` and `http://localhost(:[0-9]+)?(/.*)?` | +| Android | `OpenCloudAndroid` | `Strict` `Authorization`: `oc://android.opencloud.eu` | +| iOS | `OpenCloudIOS` | `Strict` `Authorization`: `oc://ios.opencloud.eu` | 1. Log in to authentik as an administrator and open the Admin interface. 2. Navigate to **Applications** > **Applications** and click **New Application**. diff --git a/website/integrations/chat-communication-collaboration/openproject/index.md b/website/integrations/chat-communication-collaboration/openproject/index.md index 810faadcb7..5fa39a36f0 100644 --- a/website/integrations/chat-communication-collaboration/openproject/index.md +++ b/website/integrations/chat-communication-collaboration/openproject/index.md @@ -4,6 +4,8 @@ sidebar_label: OpenProject support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is OpenProject? > OpenProject is a web-based project management software. Use OpenProject to manage your projects, tasks and goals. Collaborate via work packages and link them to your pull requests on GitHub. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of OpenProject with authentik, you need to create a property mapping and an application/provider pair in authentik. ### Create a scope mapping @@ -61,7 +65,7 @@ OpenProject requires a first and last name for each user. By default authentik o - **Protocol settings**: - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - **Redirect URI**: - - Strict: `https://openproject.company/auth/oidc-authentik/callback` + - `Strict` `Authorization`: `https://openproject.company/auth/oidc-authentik/callback` - **Signing key**: select any available signing key. - **Advanced protocol settings**: - **Scopes**: diff --git a/website/integrations/chat-communication-collaboration/owncloud/index.md b/website/integrations/chat-communication-collaboration/owncloud/index.md index 3fe9e17576..2ffe8b378d 100644 --- a/website/integrations/chat-communication-collaboration/owncloud/index.md +++ b/website/integrations/chat-communication-collaboration/owncloud/index.md @@ -4,6 +4,8 @@ sidebar_label: ownCloud support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is ownCloud? > ownCloud is a free and open-source software project for content collaboration and sharing and syncing of files. @@ -23,6 +25,8 @@ This guide focuses on deploying ownCloud installations using Docker. If you depl ## authentik configuration + + To support the integration of ownCloud with authentik, you need to create multiple application/provider pairs in authentik. A different pair is required for the Web UI, Desktop application, Android application, and iOS application. The configuration for each application is nearly identical, except for the **Client ID**, **Client Secret**, and the **Redirect URI** values, which are [predefined](https://doc.owncloud.com/server/latest/admin_manual/configuration/user/oidc/oidc.html#client-ids-secrets-and-redirect-uris) by ownCloud for the Desktop, Android, and iOS applications. @@ -43,29 +47,29 @@ The configuration for each application is nearly identical, except for the **Cli - **Client ID**: Use the value generated by authentik. - **Client Secret**: Use the value generated by authentik. - **Redirect URIs**: - - Strict: `https://owncloud.company/apps/openidconnect/redirect` + - `Strict` `Authorization`: `https://owncloud.company/apps/openidconnect/redirect` **Desktop Application** - **Signing Key**: Select any available signing key. - **Client ID**: Use the predefined value found in the [ownCloud admin manual](https://doc.owncloud.com/server/latest/admin_manual/configuration/user/oidc/oidc.html#client-id). - **Client Secret**: Use the predefined value found in the [ownCloud admin manual](https://doc.owncloud.com/server/latest/admin_manual/configuration/user/oidc/oidc.html#client-secret). - **Redirect URIs**: - - Regex: `http://localhost:\d+` - - Regex: `http://127.0.0.1:\d+` + - `Regex` `Authorization`: `http://localhost:\d+` + - `Regex` `Authorization`: `http://127.0.0.1:\d+` **Android Application** - **Signing Key**: Select any available signing key. - **Client ID**: Use the predefined value found in the [ownCloud admin manual](https://doc.owncloud.com/server/latest/admin_manual/configuration/user/oidc/oidc.html#client-id). - **Client Secret**: Use the predefined value found in the [ownCloud admin manual](https://doc.owncloud.com/server/latest/admin_manual/configuration/user/oidc/oidc.html#client-secret). - **Redirect URI**: - - Strict: `oc://android.owncloud.com` + - `Strict` `Authorization`: `oc://android.owncloud.com` **iOS Application** - **Signing Key**: Select any available signing key. - **Client ID**: Use the predefined value found in the [ownCloud admin manual](https://doc.owncloud.com/server/latest/admin_manual/configuration/user/oidc/oidc.html#client-id). - **Client Secret**: Use the predefined value found in the [ownCloud admin manual](https://doc.owncloud.com/server/latest/admin_manual/configuration/user/oidc/oidc.html#client-secret). - **Redirect URI**: - - Strict: `oc://ios.owncloud.com` + - `Strict` `Authorization`: `oc://ios.owncloud.com` - **Advanced protocol settings:** - **Scopes**: Select the following scopes for each of the four application/provider pairs: `email`, `offline_access`, `openid`, `profile`. diff --git a/website/integrations/chat-communication-collaboration/planka/index.mdx b/website/integrations/chat-communication-collaboration/planka/index.mdx index 3cb8a3938c..184f8fb23a 100644 --- a/website/integrations/chat-communication-collaboration/planka/index.mdx +++ b/website/integrations/chat-communication-collaboration/planka/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Planka support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Planka? > Planka is an open-source, Trello-like application with a Kanban board system, used for project management. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Planka with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Planka with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://planka.company/oidc-callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://planka.company/oidc-callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/rocketchat/index.md b/website/integrations/chat-communication-collaboration/rocketchat/index.md index ec6b751bc9..eb4dc1657f 100644 --- a/website/integrations/chat-communication-collaboration/rocketchat/index.md +++ b/website/integrations/chat-communication-collaboration/rocketchat/index.md @@ -4,6 +4,8 @@ sidebar_label: Rocket.chat support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Rocket.chat? > Rocket.Chat is an open-source fully customizable communications platform developed in JavaScript for organizations with high standards of data protection. It is licensed under the MIT License with some other licenses mixed in. See [Rocket.chat GitHub](https://github.com/RocketChat/Rocket.Chat/blob/develop/LICENSE) for licensing information. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Rocket.chat with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Rocket.chat with authentik, you need to create an - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://rocket.company/\_oauth/authentik`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://rocket.company/\_oauth/authentik`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/roundcube/index.md b/website/integrations/chat-communication-collaboration/roundcube/index.md index 16ea18ad68..a87f28148e 100644 --- a/website/integrations/chat-communication-collaboration/roundcube/index.md +++ b/website/integrations/chat-communication-collaboration/roundcube/index.md @@ -4,6 +4,8 @@ sidebar_label: Roundcube support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Roundcube? > Roundcube is a browser-based multilingual IMAP client with an application-like user interface. It provides the full functionality you expect from an email client, including MIME support, address book, folder manipulation, message searching and spell checking. @@ -29,6 +31,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Roundcube with authentik, you need to create an application/provider pair in authentik. ### Create property mappings @@ -59,7 +63,7 @@ To support the integration of Roundcube with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://roundcube.company/index.php?\_task=settings&\_action=plugin.oauth_redirect`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://roundcube.company/index.php?\_task=settings&\_action=plugin.oauth_redirect`. - Select any available signing key. - Under **Advanced protocol settings**: - Under **Scopes**, add `dovecotprofile` and `authentik default OAuth Mapping: OpenID 'offline_access'` to the list of selected scopes. diff --git a/website/integrations/chat-communication-collaboration/sharepoint-se/index.md b/website/integrations/chat-communication-collaboration/sharepoint-se/index.md index b10ca7489b..8f1ecac453 100644 --- a/website/integrations/chat-communication-collaboration/sharepoint-se/index.md +++ b/website/integrations/chat-communication-collaboration/sharepoint-se/index.md @@ -4,6 +4,8 @@ sidebar_label: SharePoint Server SE support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Microsoft SharePoint? > SharePoint is a proprietary, web-based collaborative platform that integrates natively with Microsoft 365. @@ -66,6 +68,8 @@ These guidelines use the following placeholders for the overall setup: ## authentik configuration + + ### Step 1: Create authentik OpenID property mappings SharePoint requires additional properties within the OpenID and profile scopes in order to operate OIDC properly and map incoming authentik OID claims with Microsoft claims. @@ -140,7 +144,7 @@ From the authentik Admin Dashboard: :::info use the explicit flow if user consents are required ::: - - **Redirect URIs / Origins**: `auth.providerRedirectURI` + - **Redirect URIs / Origins** (`Strict` `Authorization`): `auth.providerRedirectURI` - **Signing Key**: authentik Self-signed Certificate :::info The certificate is used for signing JWT tokens; if you change it after the integration do not forget to update your SharePoint Trusted Certificate. diff --git a/website/integrations/chat-communication-collaboration/vikunja/index.mdx b/website/integrations/chat-communication-collaboration/vikunja/index.mdx index ffc336152c..8d528ffe16 100644 --- a/website/integrations/chat-communication-collaboration/vikunja/index.mdx +++ b/website/integrations/chat-communication-collaboration/vikunja/index.mdx @@ -4,6 +4,7 @@ sidebar_label: Vikunja support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -31,6 +32,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Vikunja with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -41,8 +44,8 @@ To support the integration of Vikunja with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - For web login, set a `Strict` redirect URI to `https://vikunja.company/auth/openid/authentik`. - - If using the Vikunja desktop client, add a `Regex` redirect URI such as `^http://127\\.0\\.0\\.1:[0-9]+/auth/openid/authentik$` to allow loopback redirects to `127.0.0.1`. + - For web login, add a **Redirect URI** of type `Strict` `Authorization` as `https://vikunja.company/auth/openid/authentik`. + - If using the Vikunja desktop client, add a **Redirect URI** of type `Regex` `Authorization` such as `^http://127\\.0\\.0\\.1:[0-9]+/auth/openid/authentik$` to allow loopback redirects to `127.0.0.1`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. 3. Click **Submit** to save the new application and provider. diff --git a/website/integrations/chat-communication-collaboration/wekan/index.mdx b/website/integrations/chat-communication-collaboration/wekan/index.mdx index bc3c91a631..008d8557bf 100644 --- a/website/integrations/chat-communication-collaboration/wekan/index.mdx +++ b/website/integrations/chat-communication-collaboration/wekan/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Wekan support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Wekan? > Wekan is an open-source kanban board which allows a card-based task and to-do management. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Wekan with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Wekan with authentik, you need to create an applic - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://wekan.company/_oauth/oidc`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://wekan.company/_oauth/oidc`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/chat-communication-collaboration/writefreely/index.md b/website/integrations/chat-communication-collaboration/writefreely/index.md index 435217e1f9..180e536ddd 100644 --- a/website/integrations/chat-communication-collaboration/writefreely/index.md +++ b/website/integrations/chat-communication-collaboration/writefreely/index.md @@ -4,6 +4,8 @@ sidebar_label: Writefreely support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Writefreely? > An open source platform for building a writing space on the web. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Writefreely with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Writefreely with authentik, you need to create an - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://writefreely.company/oauth/callback/generic`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://writefreely.company/oauth/callback/generic`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/cloud-providers/aws-classic/index.mdx b/website/integrations/cloud-providers/aws-classic/index.mdx index 21a3c348a8..6838258512 100644 --- a/website/integrations/cloud-providers/aws-classic/index.mdx +++ b/website/integrations/cloud-providers/aws-classic/index.mdx @@ -4,6 +4,7 @@ sidebar_label: Amazon Web Services (Classic IAM) support_level: authentik --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import SAMLProvider20265Warning from "../../_saml-provider-2026-5-warning.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -44,6 +45,8 @@ SCIM Provisioning is only supported in conjunction with [IAM Identity Center](.. ## authentik configuration + + To support the integration of AWS with authentik via the Classic IAM method, you need to create two property mappings, an application/provider pair, and application entitlements for the AWS roles that users can assume. ### Create property mappings @@ -273,7 +276,7 @@ To support the integration of AWS with authentik using OIDC, you need to create - **Choose a Provider type**: Select OAuth2/OpenID Provider as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **slug** values because they will be required later. - - Set a `Strict` redirect URI to match the AWS resource that you want to access via OIDC. + - Add a **Redirect URI** of type `Strict` `Authorization` that matches the AWS resource that you want to access via OIDC. - Select any available signing key. - Under **Advanced protocol settings** > **Selected Scopes**, add `authentik default OAuth Mapping: OpenID 'entitlements'`. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/cloud-providers/digitalocean/index.md b/website/integrations/cloud-providers/digitalocean/index.md index 12fb4abfd6..a0b6dbacd8 100644 --- a/website/integrations/cloud-providers/digitalocean/index.md +++ b/website/integrations/cloud-providers/digitalocean/index.md @@ -4,6 +4,8 @@ sidebar_label: DigitalOcean support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is DigitalOcean? > DigitalOcean is a cloud infrastructure provider that offers developers simple, scalable virtual servers (droplets), managed databases, and other cloud services to deploy and manage applications efficiently. @@ -22,6 +24,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of DigitalOcean with authentik, you need to create a scope mapping, an application/provider pair, and application entitlements for the DigitalOcean roles that users should receive. ### Create a scope mapping @@ -72,7 +76,7 @@ To support the integration of DigitalOcean with authentik, you need to create a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://cloud.digitalocean.com/sessions/sso/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://cloud.digitalocean.com/sessions/sso/callback`. - Select any available signing key. - Under **Advanced protocol settings**: - Add the `profile` scope created in the previous section. Do not remove authentik’s `authentik default OAuth Mapping: OpenID 'profile'`, as claims such as `name` are required by DigitalOcean. diff --git a/website/integrations/cloud-providers/oracle-cloud/index.md b/website/integrations/cloud-providers/oracle-cloud/index.md index 70ba59ce8b..2eb4bea93e 100644 --- a/website/integrations/cloud-providers/oracle-cloud/index.md +++ b/website/integrations/cloud-providers/oracle-cloud/index.md @@ -4,6 +4,8 @@ sidebar_label: Oracle Cloud support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Oracle Cloud? > Oracle Cloud is the first public cloud built from the ground up to be a better cloud for every application. By rethinking core engineering and systems design for cloud computing, we created innovations that accelerate migrations, deliver better reliability and performance for all applications, and offer the complete services customers need to build innovative cloud applications. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Oracle Cloud with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -35,7 +39,7 @@ To support the integration of Oracle Cloud with authentik, you need to create an - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://tenant.identity.oraclecloud.com/oauth2/v1/social/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://tenant.identity.oraclecloud.com/oauth2/v1/social/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/dashboards/dashy/index.md b/website/integrations/dashboards/dashy/index.md index 382d70586f..580e689017 100644 --- a/website/integrations/dashboards/dashy/index.md +++ b/website/integrations/dashboards/dashy/index.md @@ -4,6 +4,8 @@ sidebar_label: Dashy support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Dashy? > Dashy is a self-hostable personal dashboard built for you. Includes status-checking, widgets, themes, icon packs, a UI editor and tons more. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Dashy with authentik, you need to create an application/provider pair in authentik. If you want to manage Dashy administrator access through authentik, create or choose a group for Dashy administrators and add the appropriate users to it. Note the exact group name because it will be required later. @@ -36,7 +40,7 @@ If you want to manage Dashy administrator access through authentik, create or ch - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **slug** values because they will be required later. - Set the **Client type** to `Public`. Dashy runs entirely in the browser and does not store a client secret. - - Create two `Strict` redirect URIs: + - Add two **Redirect URIs** of type `Strict` `Authorization`: - `https://dashy.company` - `https://dashy.company/` - Select any available signing key. diff --git a/website/integrations/dashboards/homarr/index.md b/website/integrations/dashboards/homarr/index.md index 0005de3bcc..550e93b9e8 100644 --- a/website/integrations/dashboards/homarr/index.md +++ b/website/integrations/dashboards/homarr/index.md @@ -4,6 +4,8 @@ sidebar_label: Homarr support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Homarr? > A sleek, modern dashboard that puts all of your apps and services at your fingertips. Control everything in one convenient location. Seamlessly integrates with the apps you've added, providing you with valuable information. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Homarr with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Homarr with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Create two `Strict` redirect URIs: `https://homarr.company/api/auth/callback/oidc` and `http://localhost:50575/api/auth/callback/oidc`. + - Add two **Redirect URIs** of type `Strict` `Authorization` as `https://homarr.company/api/auth/callback/oidc` and `http://localhost:50575/api/auth/callback/oidc`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/dashboards/linkwarden/index.md b/website/integrations/dashboards/linkwarden/index.md index 60cffdfc14..73d572ed29 100644 --- a/website/integrations/dashboards/linkwarden/index.md +++ b/website/integrations/dashboards/linkwarden/index.md @@ -4,6 +4,8 @@ sidebar_label: Linkwarden support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Linkwarden? > Linkwarden is an open-source collaborative bookmark manager used to collect, organize, and preserve webpages. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Linkwarden with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Linkwarden with authentik, you need to create an a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://linkwarden.company/api/v1/auth/callback/authentik`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://linkwarden.company/api/v1/auth/callback/authentik`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/development/coder/index.md b/website/integrations/development/coder/index.md index a0d75d89eb..94570c3081 100644 --- a/website/integrations/development/coder/index.md +++ b/website/integrations/development/coder/index.md @@ -4,6 +4,8 @@ sidebar_label: Coder support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Coder? > Coder is an open-source platform that provides browser-based cloud development environments, enabling developers and teams to securely write, edit, and manage code remotely without the need for local setup. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Coder with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Coder with authentik, you need to create an applic - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://coder.company/api/v2/users/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://coder.company/api/v2/users/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/development/engomo/index.mdx b/website/integrations/development/engomo/index.mdx index d9cedfb59f..c8f3967bf3 100644 --- a/website/integrations/development/engomo/index.mdx +++ b/website/integrations/development/engomo/index.mdx @@ -4,6 +4,8 @@ sidebar_label: engomo support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is engomo? > engomo is a low-code app development platform to create enterprise apps for smartphones and tablets based on Android, iOS, or iPadOS. @@ -25,6 +27,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Engomo with authentik, you need to create an application/provider pair in authentik. ### Create property mappings @@ -46,7 +50,7 @@ To support the integration of Engomo with authentik, you need to create an appli - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **slug** values because they will be required later. - Set the **Client type** to `Public`. - - Add two `Strict` redirect URIs and set them to `https://engomo.company/auth` and `com.engomo.engomo://callback/`. + - Add two **Redirect URIs** of type `Strict` `Authorization` as `https://engomo.company/auth` and `com.engomo.engomo://callback/`. - Select any available signing key. - Under **Advanced protocol settings**, add the scope you just created to the list of available scopes. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/development/forgejo/index.md b/website/integrations/development/forgejo/index.md index a29b10f261..df34aa3bf3 100644 --- a/website/integrations/development/forgejo/index.md +++ b/website/integrations/development/forgejo/index.md @@ -4,6 +4,8 @@ sidebar_label: Forgejo support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Forgejo? > Forgejo is a lightweight, self‑hosted alternative to GitHub/GitLab, with a strong emphasis on community governance and open development. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Forgejo with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Forgejo with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https:///user/oauth2/authentik/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https:///user/oauth2/authentik/callback`. - Select any available signing key. - Under **Advanced protocol settings** > **Selected Scopes**, add `authentik default OAuth Mapping: OpenID 'entitlements'`. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/development/frappe/index.md b/website/integrations/development/frappe/index.md index e5664a78a1..b893d8de94 100644 --- a/website/integrations/development/frappe/index.md +++ b/website/integrations/development/frappe/index.md @@ -4,6 +4,8 @@ sidebar_label: Frappe support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + :::info These instructions apply to all projects in the Frappe Family, including ERPNext. ::: @@ -28,6 +30,8 @@ This documentation only lists the settings that have been changed from their def ## authentik configuration + + To support the integration of Frappe with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -39,7 +43,7 @@ To support the integration of Frappe with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://frappe.company/api/method/frappe.integrations.oauth2_logins.custom/`. Replace `` with the name of the provider in Frappe. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://frappe.company/api/method/frappe.integrations.oauth2_logins.custom/`. Replace `` with the name of the provider in Frappe. - Select any available signing key. - Under **Advanced protocol settings**, set **Subject mode** to be `Based on the Users's username`. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/development/gitea/index.md b/website/integrations/development/gitea/index.md index 33dfaa2094..eda4ad538f 100644 --- a/website/integrations/development/gitea/index.md +++ b/website/integrations/development/gitea/index.md @@ -4,6 +4,8 @@ sidebar_label: Gitea support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Gitea? > Gitea is a community managed lightweight code hosting solution written in Go. It is published under the MIT license. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Gitea with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Gitea with authentik, you need to create an applic - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https:///user/oauth2/authentik/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https:///user/oauth2/authentik/callback`. - Select any available signing key. - Under **Advanced protocol settings** > **Selected Scopes**, add `authentik default OAuth Mapping: OpenID 'entitlements'`. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/development/gitlab/index.mdx b/website/integrations/development/gitlab/index.mdx index 6154cc6239..e8e243e85d 100644 --- a/website/integrations/development/gitlab/index.mdx +++ b/website/integrations/development/gitlab/index.mdx @@ -4,6 +4,8 @@ sidebar_label: GitLab support_level: authentik --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is GitLab? > GitLab is a complete DevOps platform with features for version control, CI/CD, issue tracking, and collaboration, facilitating efficient software development and deployment workflows. @@ -43,6 +45,8 @@ import Tabs from "@theme/Tabs"; ## authentik configuration + + To support the integration of GitLab with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -110,7 +114,7 @@ To support the integration of GitLab with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://gitlab.company/users/auth/openid_connect/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://gitlab.company/users/auth/openid_connect/callback`. - Select any available signing key. - Under **Advanced protocol settings**, set the **Subject mode** to `Based on the User's Email`. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/development/gravitee/index.md b/website/integrations/development/gravitee/index.md index f05fdfd16f..0e4565936f 100644 --- a/website/integrations/development/gravitee/index.md +++ b/website/integrations/development/gravitee/index.md @@ -4,6 +4,8 @@ sidebar_label: Gravitee support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Gravitee? > Gravitee.io API Management is a flexible, lightweight and blazing-fast Open Source solution that helps your organization control who, when and how users access your APIs. @@ -25,6 +27,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Gravitee with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -36,7 +40,7 @@ To support the integration of Gravitee with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Add two `Strict` redirect URI and set them to `https://gravitee.company/user/login` and `https://gravitee.company/console/`. Ensure a trailing slash is present at the end of the second redirect URI. + - Add two **Redirect URIs** of type `Strict` `Authorization` as `https://gravitee.company/user/login` and `https://gravitee.company/console/`. Ensure a trailing slash is present at the end of the second redirect URI. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/development/jenkins/index.md b/website/integrations/development/jenkins/index.md index 0ce37bf2c0..470bc2dd47 100644 --- a/website/integrations/development/jenkins/index.md +++ b/website/integrations/development/jenkins/index.md @@ -4,6 +4,8 @@ sidebar_label: Jenkins support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Jenkins? > The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Jenkins with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Jenkins with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://jenkins.company/securityRealm/finishLogin`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://jenkins.company/securityRealm/finishLogin`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/development/node-red/index.md b/website/integrations/development/node-red/index.md index f0ef11869f..4e21606981 100644 --- a/website/integrations/development/node-red/index.md +++ b/website/integrations/development/node-red/index.md @@ -4,6 +4,8 @@ sidebar_label: Node-RED support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Node-RED? > Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways. @@ -29,6 +31,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Node-RED with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -40,7 +44,7 @@ To support the integration of Node-RED with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://nodered.company/auth/strategy/callback/`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://nodered.company/auth/strategy/callback/`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/device-management/apple/index.md b/website/integrations/device-management/apple/index.md index 5a259e2680..37d0798933 100644 --- a/website/integrations/device-management/apple/index.md +++ b/website/integrations/device-management/apple/index.md @@ -13,6 +13,8 @@ authentik_enterprise: true authentik_preview: true --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Apple Business Manager? > Apple Business Manager is a web-based portal for IT administrators, managers, and procurement professionals to manage devices and automate device enrollment. @@ -71,6 +73,8 @@ Be aware that Apple Business Manager imposes the following restrictions on feder ## authentik configuration + + The workflow to configure authentik as an identity provider for Apple Business Manager involves creating scope mappings, signing keys, a Shared Signals Framework provider, and an OIDC provider/application pair. Together, these components will handle the authentication flow and backchannel communication between authentik and Apple Business Manager. @@ -160,7 +164,7 @@ You will need to create an [OAuth2/OpenID Provider](/docs/add-secure-apps/provid - **Choose a Provider type**: select **OAuth2/OpenID Provider** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://gsa-ws.apple.com/grandslam/GsService2/acs`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://gsa-ws.apple.com/grandslam/GsService2/acs`. - Select any available signing key. - Under **Advanced protocol settings**, in addition to the default scopes, add the four following **Selected Scopes** to the provider. - `Apple Business Manager ssf.manage` diff --git a/website/integrations/device-management/meshcentral/index.md b/website/integrations/device-management/meshcentral/index.md index 226adb7a07..9329c80bc7 100644 --- a/website/integrations/device-management/meshcentral/index.md +++ b/website/integrations/device-management/meshcentral/index.md @@ -4,6 +4,8 @@ sidebar_label: MeshCentral support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is MeshCentral? > MeshCentral is a free, open source, web-based platform for remote device management. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of MeshCentral with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of MeshCentral with authentik, you need to create an - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://meshcentral.company/auth-oidc-callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://meshcentral.company/auth-oidc-callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/device-management/omnissa-workspace-one-access/index.md b/website/integrations/device-management/omnissa-workspace-one-access/index.md index 6b8a5baa32..8bc4bc2330 100644 --- a/website/integrations/device-management/omnissa-workspace-one-access/index.md +++ b/website/integrations/device-management/omnissa-workspace-one-access/index.md @@ -4,6 +4,8 @@ sidebar_label: Omnissa Workspace ONE Access support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Omnissa Workspace ONE Access? > Omnissa Workspace ONE Access, now Omnissa Access, is the identity and access service for the Omnissa Workspace ONE platform. It provides single sign-on, access policies, and identity federation for applications and devices, and can delegate authentication to external identity providers such as authentik. @@ -31,6 +33,8 @@ You can leave the form open in another browser tab while configuring authentik. ## authentik configuration + + To support the integration of Omnissa Workspace ONE Access with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -43,8 +47,8 @@ To support the integration of Omnissa Workspace ONE Access with authentik, you n - Note the **Client ID** and **Client Secret** values because they will be required later. - **Protocol Settings**: - **Redirect URI**: - - Strict: the redirect URI you noted in the Omnissa Workspace ONE Access pre-configuration step. - - Strict: `awgb://oauth2`. This URI is used by the Workspace ONE mobile applications. + - `Strict` `Authorization`: the redirect URI you noted in the Omnissa Workspace ONE Access pre-configuration step. + - `Strict` `Authorization`: `awgb://oauth2`. This URI is used by the Workspace ONE mobile applications. - **Signing Key**: select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/documentation/bookstack/index.mdx b/website/integrations/documentation/bookstack/index.mdx index a73e7894fb..e80c785311 100644 --- a/website/integrations/documentation/bookstack/index.mdx +++ b/website/integrations/documentation/bookstack/index.mdx @@ -4,6 +4,7 @@ sidebar_label: BookStack support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -38,6 +39,8 @@ You can configure Bookstack to use either OIDC or SAML, and this guide explains ## authentik configuration + + To support the integration of BookStack with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -48,7 +51,7 @@ To support the integration of BookStack with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://bookstack.company/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://bookstack.company/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/documentation/dokuwiki/index.md b/website/integrations/documentation/dokuwiki/index.md index 2dd3bc1cb0..1d45852a02 100644 --- a/website/integrations/documentation/dokuwiki/index.md +++ b/website/integrations/documentation/dokuwiki/index.md @@ -4,6 +4,8 @@ sidebar_label: DokuWiki support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is DokuWiki? > DokuWiki is an open source wiki application licensed under GPLv2 and written in the PHP programming language. It works on plain text files and thus does not need a database. Its syntax is similar to the one used by MediaWiki and it is often recommended as a more lightweight, easier to customize alternative to MediaWiki. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of DokuWiki with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik diff --git a/website/integrations/documentation/karakeep/index.md b/website/integrations/documentation/karakeep/index.md index 19d6b625ad..1eb9d46a33 100644 --- a/website/integrations/documentation/karakeep/index.md +++ b/website/integrations/documentation/karakeep/index.md @@ -4,6 +4,8 @@ sidebar_label: Karakeep support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Karakeep? > A self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full-text search. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Karakeep with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Karakeep with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://karakeep.company/api/auth/callback/custom`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://karakeep.company/api/auth/callback/custom`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/documentation/kitchenowl/index.md b/website/integrations/documentation/kitchenowl/index.md index 87aa24dbb0..802e171e35 100644 --- a/website/integrations/documentation/kitchenowl/index.md +++ b/website/integrations/documentation/kitchenowl/index.md @@ -4,6 +4,8 @@ sidebar_label: KitchenOwl support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is KitchenOwl? > KitchenOwl is a smart self-hosted grocery list and recipe manager. Easily add items to your shopping list before you go shopping. You can also create recipes and set up meal plans to help you organize your cooking. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of KitchenOwl with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of KitchenOwl with authentik, you need to create an a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret** values because they will be required later. - - Create two `Strict` redirect URIs and set them to `https://kitchenowl.company/signin/redirect` and `kitchenowl:/signin/redirect`. + - Add two **Redirect URIs** of type `Strict` `Authorization` as `https://kitchenowl.company/signin/redirect` and `kitchenowl:/signin/redirect`. 3. Click **Submit** to save the new application and provider. diff --git a/website/integrations/documentation/mealie/index.md b/website/integrations/documentation/mealie/index.md index d21edafe32..96117a7172 100644 --- a/website/integrations/documentation/mealie/index.md +++ b/website/integrations/documentation/mealie/index.md @@ -4,6 +4,8 @@ sidebar_label: Mealie support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Mealie? > Mealie is a self-hosted recipe manager and meal planner. Easily add recipes by providing the URL and Mealie will automatically import the relevant data or add a family recipe with the UI editor. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Mealie with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Mealie with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, , and **slug** values because they will be required later. - - Create two `Strict` redirect URIs and set to `https://mealie.company/login` and `https://mealie.company/login?direct=1`. + - Add two **Redirect URIs** of type `Strict` `Authorization` as `https://mealie.company/login` and `https://mealie.company/login?direct=1`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/documentation/netbox/index.md b/website/integrations/documentation/netbox/index.md index 8a4cdaa9c8..0cdcffef91 100644 --- a/website/integrations/documentation/netbox/index.md +++ b/website/integrations/documentation/netbox/index.md @@ -4,6 +4,8 @@ sidebar_label: NetBox support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is NetBox? > NetBox is the leading solution for modeling and documenting modern networks. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of NetBox with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of NetBox with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://netbox.company/oauth/complete/oidc/`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://netbox.company/oauth/complete/oidc/`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/documentation/outline/index.md b/website/integrations/documentation/outline/index.md index ab058984bc..547fd9cc2e 100644 --- a/website/integrations/documentation/outline/index.md +++ b/website/integrations/documentation/outline/index.md @@ -4,6 +4,8 @@ sidebar_label: Outline support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Outline? > Your team's knowledge base. @@ -24,6 +26,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Outline with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -35,7 +39,7 @@ To support the integration of Outline with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://outline.company/auth/oidc.callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://outline.company/auth/oidc.callback`. - Select any available signing key. - Under **Advanced protocol settings**, set the **Subject Mode** to **Based on the User's username**. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/documentation/paperless-ngx/index.mdx b/website/integrations/documentation/paperless-ngx/index.mdx index 758116cee2..c14dcbbc85 100644 --- a/website/integrations/documentation/paperless-ngx/index.mdx +++ b/website/integrations/documentation/paperless-ngx/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Paperless-ngx support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Paperless-ngx? > Paperless-ngx is an application that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents. It was a fork from Paperless-ng, in turn a fork from the original Paperless, neither of which are maintained any longer. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Paperless-ngx with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Paperless-ngx with authentik, you need to create a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://paperless.company/accounts/oidc/authentik/login/callback/`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://paperless.company/accounts/oidc/authentik/login/callback/`. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. - **Advanced protocol settings**: - **Selected Scopes**: Add the following diff --git a/website/integrations/documentation/papra/index.mdx b/website/integrations/documentation/papra/index.mdx index 06f04fd13a..3ded3f7628 100644 --- a/website/integrations/documentation/papra/index.mdx +++ b/website/integrations/documentation/papra/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Papra support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Papra? > An open-source document management platform designed to help you organize, secure, and archive your files effortlessly. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Papra with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Papra with authentik, you need to create an applic - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **Slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://papra.company/api/auth/oauth2/callback/authentik`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://papra.company/api/auth/oauth2/callback/authentik`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/documentation/tandoor/index.md b/website/integrations/documentation/tandoor/index.md index 75a7259e7c..dde4f187b1 100644 --- a/website/integrations/documentation/tandoor/index.md +++ b/website/integrations/documentation/tandoor/index.md @@ -4,6 +4,8 @@ sidebar_label: Tandoor support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Tandoor? > Application for managing recipes, planning meals and building shopping lists. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Tandoor with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Tandoor with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://tandoor.company/accounts/oidc/authentik/login/callback/`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://tandoor.company/accounts/oidc/authentik/login/callback/`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/documentation/wiki-js/index.md b/website/integrations/documentation/wiki-js/index.md index d02f80d636..9353aec562 100644 --- a/website/integrations/documentation/wiki-js/index.md +++ b/website/integrations/documentation/wiki-js/index.md @@ -4,6 +4,8 @@ sidebar_label: Wiki.js support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Wiki.js? > Wiki.js is a wiki engine running on Node.js and written in JavaScript. It is free software released under the Affero GNU General Public License. It is available as a self-hosted solution or using "single-click" install on the DigitalOcean and AWS marketplace. @@ -33,6 +35,8 @@ Add a _Generic OpenID Connect / OAuth2_ strategy and take note of the _Callback ## authentik configuration + + To support the integration of Wiki.js with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -44,7 +48,7 @@ To support the integration of Wiki.js with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://wiki.company/login/id-from-wiki/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://wiki.company/login/id-from-wiki/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/hypervisors-orchestrators/arcane/index.md b/website/integrations/hypervisors-orchestrators/arcane/index.md index c2ca0a3774..805f50c3b0 100644 --- a/website/integrations/hypervisors-orchestrators/arcane/index.md +++ b/website/integrations/hypervisors-orchestrators/arcane/index.md @@ -4,6 +4,8 @@ sidebar_label: Arcane support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Arcane? > Modern Docker Management, Designed for Everyone. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Arcane with authentik, you need to create an application/provider pair in authentik. ### Create custom scope mapping @@ -53,7 +57,7 @@ Arcane either requires the email scope to return a `true` value for whether the - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://arcane.company/auth/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://arcane.company/auth/oidc/callback`. - Select any available signing key. - Under **Advanced protocol settings**: - Remove the `authentik default OAuth Mapping: OpenID 'email'` scope, and add the custom scope mapping you created above. diff --git a/website/integrations/hypervisors-orchestrators/portainer/index.md b/website/integrations/hypervisors-orchestrators/portainer/index.md index be6161989c..8e43594255 100644 --- a/website/integrations/hypervisors-orchestrators/portainer/index.md +++ b/website/integrations/hypervisors-orchestrators/portainer/index.md @@ -4,6 +4,8 @@ sidebar_label: Portainer support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Portainer? > Portainer is a powerful, GUI-based Container-as-a-Service solution that helps organizations manage and deploy cloud-native applications easily and securely. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Portainer with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Portainer with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations: - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://portainer.company/`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://portainer.company/`. - Select any available signing key. - Under **Advanced protocol settings** > **Selected Scopes**, add `authentik default OAuth Mapping: OpenID 'entitlements'`. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/hypervisors-orchestrators/proxmox-ve/index.md b/website/integrations/hypervisors-orchestrators/proxmox-ve/index.md index a9506d099f..b388bb87ad 100644 --- a/website/integrations/hypervisors-orchestrators/proxmox-ve/index.md +++ b/website/integrations/hypervisors-orchestrators/proxmox-ve/index.md @@ -4,6 +4,8 @@ sidebar_label: Proxmox VE support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Proxmox VE? > Proxmox Virtual Environment is an open source server virtualization management solution based on QEMU/KVM and LXC. You can manage virtual machines, containers, highly available clusters, storage, and networks with an integrated, easy-to-use web interface or via CLI. Proxmox VE code is licensed under the GNU Affero General Public License, version 3. The project is developed and maintained by Proxmox Server Solutions GmbH. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Proxmox with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Proxmox with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://proxmox.company:8006`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://proxmox.company:8006`. - Select any available signing key. - Ensure that encryption is disabled. - Under **Advanced protocol settings**: diff --git a/website/integrations/hypervisors-orchestrators/vmware-cloud-director/index.md b/website/integrations/hypervisors-orchestrators/vmware-cloud-director/index.md index eaff37aad4..c969104797 100644 --- a/website/integrations/hypervisors-orchestrators/vmware-cloud-director/index.md +++ b/website/integrations/hypervisors-orchestrators/vmware-cloud-director/index.md @@ -4,6 +4,8 @@ sidebar_label: VMware Cloud Director support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is VMware Cloud Director? > VMware Cloud Director is a platform that enables service providers and enterprises to create multi-tenant virtual data centers (VDCs) from underlying VMware vSphere infrastructure. It supports self-service resource provisioning, secure tenant isolation, and management of compute, storage, and networking via web portals and APIs. @@ -21,6 +23,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of VMware Cloud Director with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -31,7 +35,7 @@ To support the integration of VMware Cloud Director with authentik, you need to - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://clouddirector.company/login/oauth?service=provider`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://clouddirector.company/login/oauth?service=provider`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/flows-stages/bindings/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/hypervisors-orchestrators/vmware-vcenter/index.md b/website/integrations/hypervisors-orchestrators/vmware-vcenter/index.md index da00fb37bd..e4a44cab11 100644 --- a/website/integrations/hypervisors-orchestrators/vmware-vcenter/index.md +++ b/website/integrations/hypervisors-orchestrators/vmware-vcenter/index.md @@ -4,6 +4,8 @@ sidebar_label: VMware vCenter support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is vCenter? > vCenter Server is the centralized management utility for VMware, and is used to manage virtual machines, multiple ESXi hosts, and all dependent components from a single centralized location. VMware vMotion and svMotion require the use of vCenter and ESXi hosts. @@ -25,6 +27,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of vCenter with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -36,7 +40,7 @@ To support the integration of vCenter with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://vcenter.company/ui/login/oauth2/authcode`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://vcenter.company/ui/login/oauth2/authcode`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/hypervisors-orchestrators/xen-orchestra/index.md b/website/integrations/hypervisors-orchestrators/xen-orchestra/index.md index e984d08396..4807639da1 100644 --- a/website/integrations/hypervisors-orchestrators/xen-orchestra/index.md +++ b/website/integrations/hypervisors-orchestrators/xen-orchestra/index.md @@ -4,6 +4,8 @@ sidebar_label: Xen Orchestra support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Xen Orchestra? > Xen Orchestra provides a user friendly web interface for every Xen based hypervisor (XenServer, xcp-ng, etc.). @@ -28,6 +30,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Xen Orchestra with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -39,7 +43,7 @@ To support the integration of Xen Orchestra with authentik, you need to create a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://xenorchestra.company/signin/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://xenorchestra.company/signin/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/apache-guacamole/index.mdx b/website/integrations/infrastructure/apache-guacamole/index.mdx index a91a85d647..be8e3ed55a 100644 --- a/website/integrations/infrastructure/apache-guacamole/index.mdx +++ b/website/integrations/infrastructure/apache-guacamole/index.mdx @@ -4,6 +4,7 @@ sidebar_label: Apache Guacamole support_level: authentik --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -26,6 +27,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Apache Guacamole with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -37,7 +40,7 @@ To support the integration of Apache Guacamole with authentik, you need to creat - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://guacamole.company/`. If you have configured [Apache Tomcat](https://tomcat.apache.org/) to run Apache Guacamole on a subpath, you will need to update this value accordingly. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://guacamole.company/`. If you have configured [Apache Tomcat](https://tomcat.apache.org/) to run Apache Guacamole on a subpath, you will need to update this value accordingly. - Select any available signing key. - Note that Apache Guacamole does not support session tokens longer than 300 minutes (5 hours). - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/argocd/index.md b/website/integrations/infrastructure/argocd/index.md index ae576f176d..6c201276c3 100644 --- a/website/integrations/infrastructure/argocd/index.md +++ b/website/integrations/infrastructure/argocd/index.md @@ -4,6 +4,8 @@ sidebar_label: ArgoCD support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is ArgoCD? > Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of ArgoCD with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of ArgoCD with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Add two `Strict` redirect URI and set them to `https://argocd.company/api/dex/callback` and `https://localhost:8085/auth/callback`. + - Add two **Redirect URIs** of type `Strict` `Authorization` as `https://argocd.company/api/dex/callback` and `https://localhost:8085/auth/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/harbor/index.md b/website/integrations/infrastructure/harbor/index.md index cb18da1d9c..4d7ec76acc 100644 --- a/website/integrations/infrastructure/harbor/index.md +++ b/website/integrations/infrastructure/harbor/index.md @@ -4,6 +4,8 @@ sidebar_label: Harbor support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Harbor? > Harbor is an open source container image registry that secures images with role-based access control, scans images for vulnerabilities, and signs images as trusted. A CNCF Graduated project, Harbor delivers compliance, performance, and interoperability to help you consistently and securely manage images across cloud native compute platforms like Kubernetes and Docker. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Harbor with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -35,7 +39,7 @@ To support the integration of Harbor with authentik, you need to create an appli - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - **Protocol Settings**: - **Redirect URI**: - - Strict: `https://harbor.company/c/oidc/callback`. + - `Strict` `Authorization`: `https://harbor.company/c/oidc/callback`. - **Signing Key**: select any available signing key. - **Advanced Protocol Settings**: - **Scopes**: add `authentik default OAuth Mapping: OpenID 'offline_access'` to **Selected Scopes**. diff --git a/website/integrations/infrastructure/keycloak/index.mdx b/website/integrations/infrastructure/keycloak/index.mdx index df90fb72c6..b4ba14dc11 100644 --- a/website/integrations/infrastructure/keycloak/index.mdx +++ b/website/integrations/infrastructure/keycloak/index.mdx @@ -4,6 +4,7 @@ sidebar_label: Keycloak support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import SAMLProvider20265Warning from "../../_saml-provider-2026-5-warning.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -39,6 +40,8 @@ Keycloak can be configured to use either OIDC or SAML for federated login source ## authentik configuration + + To support the integration of Keycloak with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -49,7 +52,7 @@ To support the integration of Keycloak with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://keycloak.company/access/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://keycloak.company/access/oidc/callback`. - Set the **Logout URI** to `https://keycloak.company/realms//protocol/openid-connect/logout/backchannel-logout`. - Set the **Logout Method** to `Back-channel`. - Select any available signing key. diff --git a/website/integrations/infrastructure/komodo/index.mdx b/website/integrations/infrastructure/komodo/index.mdx index de4d83794a..a8abba5089 100644 --- a/website/integrations/infrastructure/komodo/index.mdx +++ b/website/integrations/infrastructure/komodo/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Komodo support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Komodo? > Komodo is a web-based application designed to organize and streamline the management of servers, builds, deployments, and automated tasks. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Komodo with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Komodo with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://komodo.company/auth/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://komodo.company/auth/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. - **Configure Launch URL** _(optional)_: set to `https://komodo.company/auth/oidc/login`. diff --git a/website/integrations/infrastructure/minio/index.mdx b/website/integrations/infrastructure/minio/index.mdx index a82346f0c7..e53fc9e4d7 100644 --- a/website/integrations/infrastructure/minio/index.mdx +++ b/website/integrations/infrastructure/minio/index.mdx @@ -4,6 +4,7 @@ sidebar_label: MinIO support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -30,6 +31,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of MinIO with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -40,7 +43,7 @@ To support the integration of MinIO with authentik, you need to create an applic - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://minio.company/oauth_callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://minio.company/oauth_callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/nexterm/index.md b/website/integrations/infrastructure/nexterm/index.md index ab4e0eb326..7a5284b1f3 100644 --- a/website/integrations/infrastructure/nexterm/index.md +++ b/website/integrations/infrastructure/nexterm/index.md @@ -4,6 +4,8 @@ sidebar_label: Nexterm support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Nexterm? > Nexterm is an open-source server management platform for SSH, VNC, and RDP. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Nexterm with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Nexterm with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://nexterm.company/api/auth/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://nexterm.company/api/auth/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/osticket/index.md b/website/integrations/infrastructure/osticket/index.md index 57f6f202b1..e1a5976301 100644 --- a/website/integrations/infrastructure/osticket/index.md +++ b/website/integrations/infrastructure/osticket/index.md @@ -4,6 +4,8 @@ sidebar_label: osTicket support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is osTicket? > osTicket is a web-based, open source user support/ticketing solution. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of osTicket with authentik, you need to create an application/provider pair in authentik. 1. Log in to authentik as an administrator and open the authentik Admin interface. @@ -31,7 +35,7 @@ To support the integration of osTicket with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret** and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://osticket.company/osticket/api/auth/oauth2`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://osticket.company/osticket/api/auth/oauth2`. - Select any available signing key. - Under **Advanced protocol settings**: - **Subject Mode**: `Based on the User's Email` diff --git a/website/integrations/infrastructure/pgadmin/index.md b/website/integrations/infrastructure/pgadmin/index.md index ff0e1fb1fe..8f63db21c0 100644 --- a/website/integrations/infrastructure/pgadmin/index.md +++ b/website/integrations/infrastructure/pgadmin/index.md @@ -4,6 +4,8 @@ sidebar_label: pgAdmin support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is pgAdmin? > pgAdmin is a management tool for PostgreSQL and derivative relational databases such as EnterpriseDB's EDB Advanced Server. It may be run either as a web or desktop application. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of pgAdmin with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -37,7 +41,7 @@ To support the integration of pgAdmin with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://pgadmin.company/oauth2/authorize`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://pgadmin.company/oauth2/authorize`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/plesk/index.md b/website/integrations/infrastructure/plesk/index.md index 9a261458a7..54d57cd237 100644 --- a/website/integrations/infrastructure/plesk/index.md +++ b/website/integrations/infrastructure/plesk/index.md @@ -4,6 +4,8 @@ sidebar_label: Plesk support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Plesk? > Plesk is a web hosting platform with a control panel that helps manage servers, applications, and websites through a comprehensive graphical user interface. It provides tools for web professionals, IT administrators, and hosting companies to simplify the process of hosting and managing websites. @@ -27,6 +29,8 @@ Replace these placeholders in the guide with your values: ## authentik configuration + + To support the integration of Plesk with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Plesk with authentik, you need to create an applic - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://plesk.company/modules/oauth/public/login.php`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://plesk.company/modules/oauth/public/login.php`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/rabbitmq/index.mdx b/website/integrations/infrastructure/rabbitmq/index.mdx index 5b10602f2b..cf4d6d9b25 100644 --- a/website/integrations/infrastructure/rabbitmq/index.mdx +++ b/website/integrations/infrastructure/rabbitmq/index.mdx @@ -4,6 +4,7 @@ sidebar_label: RabbitMQ support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -28,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of RabbitMQ with authentik, you need to create a property mapping, two user groups, and an application/provider pair. ### Create a property mapping @@ -66,7 +69,7 @@ After creating the groups, select a group, navigate to the **Users** tab, and ma - Set **Client Type** to **Public**. - Note the **Client ID** and **slug** values because they will be required later. - Under **Grant Types**, select **Authorization Code** and **Client credentials**. - - Set a `Strict` redirect URI to `https://rabbitmq.company:15672/js/oidc-oauth/login-callback.html`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://rabbitmq.company:15672/js/oidc-oauth/login-callback.html`. - Select any available signing key. - Under **Advanced protocol settings**: - Add the `RabbitMQ claims` scope that you created in the previous section to **Selected Scopes**. diff --git a/website/integrations/infrastructure/rustdesk-pro/index.mdx b/website/integrations/infrastructure/rustdesk-pro/index.mdx index f50a6e2052..4aef8bb2ce 100644 --- a/website/integrations/infrastructure/rustdesk-pro/index.mdx +++ b/website/integrations/infrastructure/rustdesk-pro/index.mdx @@ -4,6 +4,8 @@ sidebar_label: RustDesk Server Pro support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is RustDesk Server Pro? > RustDesk Server Pro is a premium self-hosted solution for managing remote desktop connections securely and efficiently. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Rustdesk Server Pro with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Rustdesk Server Pro with authentik, you need to cr - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://rustdesk.company/api/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://rustdesk.company/api/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/semaphore/index.mdx b/website/integrations/infrastructure/semaphore/index.mdx index e2e7f7117a..4ffdeb8337 100644 --- a/website/integrations/infrastructure/semaphore/index.mdx +++ b/website/integrations/infrastructure/semaphore/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Semaphore support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Semaphore UI? > Semaphore UI is a modern web interface for managing popular DevOps tools. @@ -25,6 +27,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Semaphore with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -35,7 +39,7 @@ To support the integration of Semaphore with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://semaphore.company/api/auth/oidc/authentik/redirect`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://semaphore.company/api/auth/oidc/authentik/redirect`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/synology-dsm/index.md b/website/integrations/infrastructure/synology-dsm/index.md index b3d9fe326a..c5811b0909 100644 --- a/website/integrations/infrastructure/synology-dsm/index.md +++ b/website/integrations/infrastructure/synology-dsm/index.md @@ -4,6 +4,8 @@ sidebar_label: Synology DSM (DiskStation Manager) support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Synology DSM? > Synology Inc. is a Taiwanese corporation that specializes in network-attached storage (NAS) appliances. Synology's line of NAS is known as the DiskStation for desktop models, FlashStation for all-flash models, and RackStation for rack-mount models. Synology's products are distributed worldwide and localized in several languages. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Synology DSM with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Synology DSM with authentik, you need to create an - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://synology.company`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://synology.company`. - Select any available signing key. - Under **Advanced protocol settings**, set the **subject mode** to be based on the user's email. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/termix/index.mdx b/website/integrations/infrastructure/termix/index.mdx index 5db31fb6ce..4eac67e7a4 100644 --- a/website/integrations/infrastructure/termix/index.mdx +++ b/website/integrations/infrastructure/termix/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Termix support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Termix? > Termix is a clientless web-based server management platform with SSH terminal, tunneling, and file editing capabilities. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Termix with authentik, you need to create an application/provider pair in authentik. 1. Log in to authentik as an administrator and open the authentik Admin interface. @@ -31,7 +35,7 @@ To support the integration of Termix with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://termix.company/users/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://termix.company/users/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/terrakube/index.md b/website/integrations/infrastructure/terrakube/index.md index 10f7a4f35a..b10aba8f25 100644 --- a/website/integrations/infrastructure/terrakube/index.md +++ b/website/integrations/infrastructure/terrakube/index.md @@ -4,6 +4,8 @@ sidebar_label: Terrakube support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Terrakube? > Terrakube is an open-source collaboration platform designed for managing remote Infrastructure-as-Code (IaC) operations with Terraform. It serves as an alternative to proprietary tools like Terraform Enterprise. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Terrakube with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Terrakube with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://terrakube-dex.company/dex/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://terrakube-dex.company/dex/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/zammad/index.md b/website/integrations/infrastructure/zammad/index.md index 6cc586b61d..13788cac5c 100644 --- a/website/integrations/infrastructure/zammad/index.md +++ b/website/integrations/infrastructure/zammad/index.md @@ -4,6 +4,7 @@ sidebar_label: Zammad support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; import SAMLProvider20265Warning from "../../\_saml-provider-2026-5-warning.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -40,6 +41,8 @@ values={[ ## authentik configuration + + To support the integration of Zammad with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -102,7 +105,7 @@ To support the integration of Zammad with authentik, you need to create an appli - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Set the **Client type** to `Public`. - Take note of the **Client ID** and **slug** values because they will be required later. - - Set the **Redirect URIs/Origins** to `Strict` / `https://zammad.company/auth/openid_connect/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://zammad.company/auth/openid_connect/callback`. - Select a **Signing Key**. - Under **Advanced protocol settings**, set **Subject mode** to **Based on the User's Email**. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/zendesk/index.mdx b/website/integrations/infrastructure/zendesk/index.mdx index 2ea808ab58..3897cc8bd6 100644 --- a/website/integrations/infrastructure/zendesk/index.mdx +++ b/website/integrations/infrastructure/zendesk/index.mdx @@ -4,6 +4,7 @@ sidebar_label: Zendesk support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -38,6 +39,8 @@ Zendesk can be configured to use either OIDC or SAML. This guide covers both met ## authentik configuration + + To support the integration of Zendesk with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -48,7 +51,7 @@ To support the integration of Zendesk with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://company.zendesk.com/access/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://company.zendesk.com/access/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/infrastructure/zot/index.md b/website/integrations/infrastructure/zot/index.md index 4c6b0945be..3c8f47151d 100644 --- a/website/integrations/infrastructure/zot/index.md +++ b/website/integrations/infrastructure/zot/index.md @@ -4,6 +4,8 @@ sidebar_label: Zot support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Zot? > Zot is an OCI-native container registry for distributing container images and OCI artifacts. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Zot with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -35,11 +39,9 @@ To support the integration of Zot with authentik, you need to create an applicat - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - **Protocol Settings**: - **Redirect URI**: - - Strict: `https://zot.company/zot/auth/callback/oidc`. + - `Strict` `Authorization`: `https://zot.company/zot/auth/callback/oidc`. - **Signing Key**: select any available signing key. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://zot.company/zot/auth/callback/oidc`. - - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. 3. Click **Submit** to save the new application and provider. diff --git a/website/integrations/learning/absorb-lms/index.mdx b/website/integrations/learning/absorb-lms/index.mdx index 2445d92fd1..f29b7e71fc 100644 --- a/website/integrations/learning/absorb-lms/index.mdx +++ b/website/integrations/learning/absorb-lms/index.mdx @@ -5,6 +5,7 @@ support_level: community authentik_version: 2026.5 --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import SAMLProvider20265Warning from "../../_saml-provider-2026-5-warning.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -39,6 +40,8 @@ values={[ ## authentik configuration + + To integrate authentik with Absorb LMS via OIDC, you will need to create an application and provider pair in authentik. ### Create an application and provider in authentik @@ -49,7 +52,7 @@ To integrate authentik with Absorb LMS via OIDC, you will need to create an appl - **Choose a Provider type**: select **OAuth2/OIDC Provider** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Take note of the **Client ID** and **Client Secret** values as these will be required in the next section. - - Set a `Strict` Redirect URI to `https://company.myabsorb.com/account/openidconnect` + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://company.myabsorb.com/account/openidconnect` - Select any available **Signing key**. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications in a user's **Application Dashboard**. diff --git a/website/integrations/media/audiobookshelf/index.md b/website/integrations/media/audiobookshelf/index.md index b99aeebec9..0918f4713b 100644 --- a/website/integrations/media/audiobookshelf/index.md +++ b/website/integrations/media/audiobookshelf/index.md @@ -4,6 +4,8 @@ sidebar_label: Audiobookshelf support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Audiobookshelf? > Audiobookshelf is a self-hosted audiobook and podcast server. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Audiobookshelf with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik diff --git a/website/integrations/media/freshrss/index.mdx b/website/integrations/media/freshrss/index.mdx index ebc10d11f8..9945828a29 100644 --- a/website/integrations/media/freshrss/index.mdx +++ b/website/integrations/media/freshrss/index.mdx @@ -4,6 +4,8 @@ sidebar_label: FreshRSS support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is FreshRSS? > FreshRSS is a self-hosted RSS feed aggregator. @@ -23,6 +25,8 @@ This documentation only lists the settings that have been changed from their def ## authentik configuration + + To support the integration of FreshRSS with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of FreshRSS with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Add two `Strict` redirect URIs and set them to `https://freshrss.company/i/oidc/` and `https://freshrss.company:443/i/oidc/`. If FreshRSS is exposed on a port other than `443`, update the second redirect URI accordingly. + - Add two **Redirect URIs** of type `Strict` `Authorization` as `https://freshrss.company/i/oidc/` and `https://freshrss.company:443/i/oidc/`. If FreshRSS is exposed on a port other than `443`, update the second redirect URI accordingly. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/media/immich/index.md b/website/integrations/media/immich/index.md index 9668fc947c..c8212d7fb1 100644 --- a/website/integrations/media/immich/index.md +++ b/website/integrations/media/immich/index.md @@ -4,6 +4,8 @@ sidebar_label: Immich support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Immich? > Immich is a self-hosted backup solution for photos and videos on mobile devices. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Immich with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Immich with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Add three `Strict` redirect URIs and set them to `app.immich:///oauth-callback`, `https://immich.company/auth/login`, and `https://immich.company/user-settings`. + - Add three **Redirect URIs** of type `Strict` `Authorization` as `app.immich:///oauth-callback`, `https://immich.company/auth/login`, and `https://immich.company/user-settings`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. - **Configure Launch URL** _(optional)_: set the [Launch URL](/docs/add-secure-apps/applications/#appearance) to `https://immich.company/auth/login?autoLaunch=1` to allow automatic login to Immich when clicking the application from within authentik. diff --git a/website/integrations/media/jellyfin/index.md b/website/integrations/media/jellyfin/index.md index f0252d06fd..815be053f5 100644 --- a/website/integrations/media/jellyfin/index.md +++ b/website/integrations/media/jellyfin/index.md @@ -4,6 +4,8 @@ sidebar_label: Jellyfin support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Jellyfin? > Jellyfin is a free and open source media management and streaming platform for movies, TV shows, and music. @@ -95,6 +97,8 @@ At this point, enter a username and click **Save Search Attribute Settings and Q ## OIDC configuration + + ### authentik configuration **Provider Settings** @@ -102,7 +106,7 @@ At this point, enter a username and click **Save Search Attribute Settings and Q In authentik under **Providers**, create an OAuth2/OpenID Provider with these settings: - Name: `jellyfin` -- Redirect URI: `https://jellyfin.company/sso/OID/redirect/authentik` +- **Redirect URI**: `Strict` `Authorization` `https://jellyfin.company/sso/OID/redirect/authentik` Everything else is up to you, just make sure to grab the client ID and the client secret! diff --git a/website/integrations/media/komga/index.md b/website/integrations/media/komga/index.md index 10ed952c3c..27cb7f3cc0 100644 --- a/website/integrations/media/komga/index.md +++ b/website/integrations/media/komga/index.md @@ -4,6 +4,8 @@ sidebar_label: Komga support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Komga? > Komga is an open-source comic and manga server that lets users organize, read, and stream their digital comic collections with ease. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Komga with authentik, you need to create an application/provider pair in authentik. ### Create an email verification scope mapping in authentik @@ -40,7 +44,7 @@ Refer to [Email scope verification](/docs/add-secure-apps/providers/oauth2/index - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://komga.company/login/oauth2/code/authentik`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://komga.company/login/oauth2/code/authentik`. - Select any available signing key. - **Advanced protocol settings** > **Scopes**: - Add `OAuth Mapping: OpenID 'email' with "email_verified"` to the **Selected Scopes**. diff --git a/website/integrations/media/miniflux/index.md b/website/integrations/media/miniflux/index.md index 9bea7a0a77..97f98adf79 100644 --- a/website/integrations/media/miniflux/index.md +++ b/website/integrations/media/miniflux/index.md @@ -4,6 +4,8 @@ sidebar_label: Miniflux support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Miniflux? > Miniflux is a minimalist and opinionated RSS feed reader. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Miniflux with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Miniflux with authentik, you need to create an app - **Choose a Provider type**: Select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://miniflux.company/oauth2/oidc/callback` + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://miniflux.company/oauth2/oidc/callback` - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/media/photoprism/index.md b/website/integrations/media/photoprism/index.md index 9857859d1e..287fb75624 100644 --- a/website/integrations/media/photoprism/index.md +++ b/website/integrations/media/photoprism/index.md @@ -4,6 +4,8 @@ sidebar_label: PhotoPrism support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is PhotoPrism? > PhotoPrism is an AI-powered photos app that lets you browse, organize, and find photos and videos on a home server, private server, or in the cloud. @@ -27,6 +29,8 @@ PhotoPrism requires HTTPS for OpenID Connect (OIDC). Make sure that the `PHOTOPR ## authentik configuration + + To support the integration of PhotoPrism with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -37,7 +41,7 @@ To support the integration of PhotoPrism with authentik, you need to create an a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Add one `Strict` redirect URI and set it to `https://photoprism.company/api/v1/oidc/redirect`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://photoprism.company/api/v1/oidc/redirect`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/media/seafile/index.md b/website/integrations/media/seafile/index.md index 67e2e2dec9..4b5e99fbfd 100644 --- a/website/integrations/media/seafile/index.md +++ b/website/integrations/media/seafile/index.md @@ -4,6 +4,8 @@ sidebar_label: Seafile support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Seafile? > Seafile is an open-source, cross-platform file-hosting software system. Files are stored on a central server and can be synchronized with personal computers and mobile devices through apps. Files on the Seafile server can also be accessed directly via the server's web interface. @@ -22,6 +24,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Seafile with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -32,7 +36,7 @@ To support the integration of Seafile with authentik, you need to create an appl - **Choose a Provider type**: select OAuth2/OpenID Connect as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://seafile.company/oauth/callback/`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://seafile.company/oauth/callback/`. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. 3. Click **Submit** to save the new application and provider. diff --git a/website/integrations/media/seerr/index.md b/website/integrations/media/seerr/index.md index f6e1cc3a35..74a2a527a6 100644 --- a/website/integrations/media/seerr/index.md +++ b/website/integrations/media/seerr/index.md @@ -4,6 +4,8 @@ sidebar_label: Seerr support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Seerr? > Seerr (previously Jellyseerr) is a free and open source application for managing requests in your media library. It integrates with media servers like Jellyfin, Plex, and Emby, and services such as Sonarr and Radarr. @@ -17,6 +19,8 @@ support_level: community ## authentik configuration + + To support the integration of Seerr with authentik, you need to create an application/provider pair in authentik. 1. Log in to authentik as an administrator and open the authentik Admin interface. @@ -25,7 +29,7 @@ To support the integration of Seerr with authentik, you need to create an applic - **Choose a Provider type**: OAuth2/OpenID - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and any required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://seerr.company/login`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://seerr.company/login`. - Select any available signing key. - **Configure Bindings** _(optional):_ you can create a [binding](https://docs.goauthentik.io/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user’s **Application Dashboard** page. diff --git a/website/integrations/miscellaneous/actual-budget/index.mdx b/website/integrations/miscellaneous/actual-budget/index.mdx index 1ecc595a90..f04328b09c 100644 --- a/website/integrations/miscellaneous/actual-budget/index.mdx +++ b/website/integrations/miscellaneous/actual-budget/index.mdx @@ -4,6 +4,7 @@ sidebar_label: Actual Budget support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -26,6 +27,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Actual Budget with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -36,7 +39,7 @@ To support the integration of Actual Budget with authentik, you need to create a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://actual.company/openid/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://actual.company/openid/callback`. - Select any available signing key. Actual Budget only supports the RS256 algorithm. Be aware of this when choosing a signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/miscellaneous/adventurelog/index.mdx b/website/integrations/miscellaneous/adventurelog/index.mdx index a599de2c8a..b81f0afc60 100644 --- a/website/integrations/miscellaneous/adventurelog/index.mdx +++ b/website/integrations/miscellaneous/adventurelog/index.mdx @@ -4,6 +4,8 @@ sidebar_label: AdventureLog support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is AdventureLog? > AdventureLog is a self-hosted travel tracker and trip planner. AdventureLog is the ultimate travel companion for the modern-day explorer. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of AdventureLog with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of AdventureLog with authentik, you need to create an - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Regex` redirect URI to `^https://adventurelog.company/accounts/oidc/.\*$`. + - Add a **Redirect URI** of type `Regex` `Authorization` as `^https://adventurelog.company/accounts/oidc/.\*$`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/miscellaneous/ezbookkeeping/index.mdx b/website/integrations/miscellaneous/ezbookkeeping/index.mdx index d16aaf1c2b..fd98dbd539 100644 --- a/website/integrations/miscellaneous/ezbookkeeping/index.mdx +++ b/website/integrations/miscellaneous/ezbookkeeping/index.mdx @@ -4,6 +4,7 @@ sidebar_label: ezBookkeeping support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -26,6 +27,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of ezBookkeeping with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -36,7 +39,7 @@ To support the integration of ezBookkeeping with authentik, you need to create a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://ezbookkeeping.company/oauth2/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://ezbookkeeping.company/oauth2/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/miscellaneous/filerise/index.mdx b/website/integrations/miscellaneous/filerise/index.mdx index 0311d22e73..783d388e57 100644 --- a/website/integrations/miscellaneous/filerise/index.mdx +++ b/website/integrations/miscellaneous/filerise/index.mdx @@ -4,6 +4,8 @@ sidebar_label: FileRise support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is FileRise? > Lightweight, self-hosted web-based file manager with multi-file upload, editing, and batch operations. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of FileRise with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of FileRise with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set **Redirect URI** to `https://filerise.company/api/auth/auth.php?oidc=callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://filerise.company/api/auth/auth.php?oidc=callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/miscellaneous/home-assistant/index.md b/website/integrations/miscellaneous/home-assistant/index.md index 6ea250576a..f7d6e83d4c 100644 --- a/website/integrations/miscellaneous/home-assistant/index.md +++ b/website/integrations/miscellaneous/home-assistant/index.md @@ -4,6 +4,8 @@ sidebar_label: Home Assistant support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Home Assistant? @@ -47,6 +49,8 @@ values={[ ## authentik configuration + + To support the integration of Home Assistant with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -58,7 +62,7 @@ To support the integration of Home Assistant with authentik, you need to create - Choose a **Provider Type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://hass.company/auth/openid/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://hass.company/auth/openid/callback`. - Select any available signing key (to use the RS256 `id_token_signing_alg`) - Configure Bindings (optional): you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. @@ -109,7 +113,7 @@ To support the integration of Home Assistant with authentik, you need to create - Choose a **Provider Type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://hass.company/auth/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://hass.company/auth/oidc/callback`. - Select any available signing key (to use the RS256 `id_token_signing_alg`) - Configure Bindings (optional): you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/miscellaneous/open-webui/index.md b/website/integrations/miscellaneous/open-webui/index.md index a5dfbc91f9..c5ceb67eaa 100644 --- a/website/integrations/miscellaneous/open-webui/index.md +++ b/website/integrations/miscellaneous/open-webui/index.md @@ -4,6 +4,8 @@ sidebar_label: Open WebUI support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Open WebUI? > Open WebUI is a simple, self-hosted AI platform that works entirely offline. It supports tools like Ollama and OpenAI-style APIs and has a built-in engine for RAG tasks. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Open WebUI with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Open WebUI with authentik, you need to create an a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://openwebui.company/oauth/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://openwebui.company/oauth/oidc/callback`. - Select any available signing key. - Make sure to leave the **Encryption Key** field empty. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/miscellaneous/wallos/index.mdx b/website/integrations/miscellaneous/wallos/index.mdx index b24f151b0e..7606385b16 100644 --- a/website/integrations/miscellaneous/wallos/index.mdx +++ b/website/integrations/miscellaneous/wallos/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Wallos support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Wallos? > Wallos is a self-hosted subscription and budget planning application. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Wallos with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Wallos with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://wallos.company/index.php`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://wallos.company/index.php`. - Select any available signing key. - **Configure Bindings** (optional): you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/miscellaneous/zipline/index.md b/website/integrations/miscellaneous/zipline/index.md index 38f1e5997f..814477df42 100644 --- a/website/integrations/miscellaneous/zipline/index.md +++ b/website/integrations/miscellaneous/zipline/index.md @@ -4,6 +4,8 @@ sidebar_label: Zipline support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Zipline? > Zipline is a self-hostable file upload server designed for easy file sharing, supporting tools like ShareX and Flameshot, with features such as simplified setup and extensive customization options. @@ -27,6 +29,8 @@ This guide is compatible with Zipline [version `v4.0.0`](https://github.com/dice ## authentik configuration + + To support the integration of Zipline with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Zipline with authentik, you need to create an appl - **Choose a Provider type**: Select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: Provide a name (or accept the auto-provided name), choose the authorization flow for this provider, and configure the following required settings: - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://zipline.company/api/auth/oauth/oidc`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://zipline.company/api/auth/oauth/oidc`. - Select any available signing key. - Under **Advanced protocol settings** > **Scopes**, add `authentik default OAuth Mapping: OpenID 'offline_access'` to the **Selected Scopes** list. - **Configure Bindings** _(optional)_: Create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/monitoring/beszel/index.mdx b/website/integrations/monitoring/beszel/index.mdx index e7a3c01b8c..ebe9f916cc 100644 --- a/website/integrations/monitoring/beszel/index.mdx +++ b/website/integrations/monitoring/beszel/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Beszel support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Beszel? > Beszel is a lightweight server monitoring platform that provides Docker statistics, historical data, and configurable alerts. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + The steps to configure authentik include creating an email verification scope mapping, creating an application and provider pair in authentik, obtaining the Client ID and Client Secret values, setting the redirect URI, and selecting a signing key. ### Create an email verification scope mapping in authentik @@ -44,7 +48,7 @@ Refer to [Email scope verification](/docs/add-secure-apps/providers/oauth2/index - **Choose a Provider type**: OAuth2/OpenID - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and any required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://beszel.company/api/oauth2-redirect`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://beszel.company/api/oauth2-redirect`. - Select any available signing key. - **Advanced protocol settings** > **Scopes**: - Add `OAuth Mapping: OpenID 'email' with "email_verified"` to the **Selected Scopes**. diff --git a/website/integrations/monitoring/chronograf/index.mdx b/website/integrations/monitoring/chronograf/index.mdx index e8d7bc2f6c..5ed04465f5 100644 --- a/website/integrations/monitoring/chronograf/index.mdx +++ b/website/integrations/monitoring/chronograf/index.mdx @@ -3,6 +3,8 @@ title: Integrate with Chronograf sidebar_label: Chronograf --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Chronograf? > Chronograf lets you quickly visualize the data stored in InfluxDB, enabling you to build robust queries and alerts. It is simple to use and comes with templates and libraries for rapidly creating dashboards with real-time data visualizations. @@ -22,6 +24,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Chronograf with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Chronograf with authentik, you need to create an a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://chronograf.company/oauth/authentik/callback/`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://chronograf.company/oauth/authentik/callback/`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/monitoring/gatus/index.mdx b/website/integrations/monitoring/gatus/index.mdx index 7a1b81b638..a4fe0a9362 100644 --- a/website/integrations/monitoring/gatus/index.mdx +++ b/website/integrations/monitoring/gatus/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Gatus support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Gatus? > Gatus is a developer-oriented health dashboard that gives you the ability to monitor your services using HTTP, ICMP, TCP, and even DNS queries as well as evaluate the result of said queries by using a list of conditions on values like the status code, the response time, the certificate expiration, the body and many others. The icing on top is that each of these health checks can be paired with alerting via Slack, Teams, PagerDuty, Discord, Twilio and many more. @@ -23,6 +25,8 @@ This documentation only lists the settings that have been changed from their def ## authentik configuration + + To support the integration of Gatus with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Gatus with authentik, you need to create an applic - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://gatus.company/authorization-code/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://gatus.company/authorization-code/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/monitoring/glitchtip/index.md b/website/integrations/monitoring/glitchtip/index.md index 0f05c9f64f..feb67a9e65 100644 --- a/website/integrations/monitoring/glitchtip/index.md +++ b/website/integrations/monitoring/glitchtip/index.md @@ -4,6 +4,8 @@ sidebar_label: Glitchtip support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Glitchtip? > Bugs are inevitable in web development. The important thing is to catch them when they appear. With GlitchTip, you can rest easy knowing that if your web app throws an error or goes down, you will be notified immediately. GlitchTip combines error tracking and uptime monitoring in one open-source package to keep you and your team fully up-to-date on the status of your projects. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Glitchtip with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Glitchtip with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://glitchtip.company/accounts/oidc/authentik/login/callback/`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://glitchtip.company/accounts/oidc/authentik/login/callback/`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/monitoring/grafana/index.mdx b/website/integrations/monitoring/grafana/index.mdx index 5fedbdaaf3..43596d0225 100644 --- a/website/integrations/monitoring/grafana/index.mdx +++ b/website/integrations/monitoring/grafana/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Grafana support_level: authentik --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Grafana? > Grafana is a multi-platform open source analytics and interactive visualization web application. It provides charts, graphs, and alerts for the web when connected to supported data sources, Grafana Enterprise version with additional capabilities is also available. It is expandable through a plug-in system. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Grafana with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Grafana with authentik, you need to create an appl - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://grafana.company/login/generic_oauth`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://grafana.company/login/generic_oauth`. - Set the Logout URI to `https://grafana.company/logout`. - Set the Logout Method to `Front-channel`. - Select any available signing key. diff --git a/website/integrations/monitoring/icinga/index.md b/website/integrations/monitoring/icinga/index.md index 06e29e3962..792b203e50 100644 --- a/website/integrations/monitoring/icinga/index.md +++ b/website/integrations/monitoring/icinga/index.md @@ -4,6 +4,8 @@ sidebar_label: Icinga Web 2 support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Icinga Web 2? > Icinga Web 2 is the next-generation web interface for the Icinga monitoring stack. It provides a flexible UI to view monitoring states, drill into problems, and integrate with the Icinga 2 backend. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Icinga Web 2 with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -37,7 +41,7 @@ To support the integration of Icinga Web 2 with authentik, you need to create an - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://icinga.company/icingaweb2/oidc/authentication/realm?name=authentik`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://icinga.company/icingaweb2/oidc/authentication/realm?name=authentik`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/monitoring/observium/index.md b/website/integrations/monitoring/observium/index.md index 4b9e6381c3..d660c5854e 100644 --- a/website/integrations/monitoring/observium/index.md +++ b/website/integrations/monitoring/observium/index.md @@ -4,6 +4,8 @@ sidebar_label: Observium support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Observium? > Observium is a network monitoring and management platform that provides real-time insight into network health and performance. @@ -40,6 +42,8 @@ apt install ./libapache2-mod-auth-openidc_2.4.15.7-1.bookworm_amd64.deb ## authentik configuration + + To support the integration of Observium with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -51,7 +55,7 @@ To support the integration of Observium with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://observium.company/secure/redirect_uri`. Note that the Redirect URI can be anything, as long as it does not point to existing content. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://observium.company/secure/redirect_uri`. Note that the Redirect URI can be anything, as long as it does not point to existing content. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/monitoring/pulse/index.md b/website/integrations/monitoring/pulse/index.md index c5ea687734..da36ce91ec 100644 --- a/website/integrations/monitoring/pulse/index.md +++ b/website/integrations/monitoring/pulse/index.md @@ -4,6 +4,8 @@ sidebar_label: Pulse support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Pulse? > Pulse is an open-source monitoring platform that provides real-time insight into Proxmox, Docker, and Kubernetes infrastructure. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Pulse with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Pulse with authentik, you need to create an applic - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://pulse.company/api/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://pulse.company/api/oidc/callback`. - Select any available signing key. - Under **Advanced protocol settings**, add `authentik default OAuth Mapping: OpenID 'offline_access'` to the selected scopes if you want long-lived sessions backed by refresh tokens. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/monitoring/ubuntu-landscape/index.md b/website/integrations/monitoring/ubuntu-landscape/index.md index f4161b36d9..d4e4deab7d 100644 --- a/website/integrations/monitoring/ubuntu-landscape/index.md +++ b/website/integrations/monitoring/ubuntu-landscape/index.md @@ -4,6 +4,8 @@ sidebar_label: Ubuntu Landscape support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Ubuntu Landscape? > Landscape is a systems management tool developed by Canonical. It can be run on-premises or in the cloud depending on the needs of the user. It is primarily designed for use with Ubuntu derivatives such as Desktop, Server, and Core. @@ -29,6 +31,8 @@ Landscape uses the OpenID Connect protocol for single sign-on. ## authentik configuration + + To support the integration of Landscape with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -40,7 +44,7 @@ To support the integration of Landscape with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://landscape.company/login/handle-openid`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://landscape.company/login/handle-openid`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/monitoring/whats-up-docker/index.md b/website/integrations/monitoring/whats-up-docker/index.md index ed47fd8a62..c85db5da6b 100644 --- a/website/integrations/monitoring/whats-up-docker/index.md +++ b/website/integrations/monitoring/whats-up-docker/index.md @@ -4,6 +4,8 @@ sidebar_label: What's Up Docker support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is What's Up Docker? > What's Up Docker (WUD) is an easy-to-use tool that alerts you whenever a new version of your Docker containers is released. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of What's Up Docker with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of What's Up Docker with authentik, you need to creat - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://wud.company/auth/oidc/authentik/cb`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://wud.company/auth/oidc/authentik/cb`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/networking/firezone/index.md b/website/integrations/networking/firezone/index.md index 7209c8d314..0ed2e1bcfe 100644 --- a/website/integrations/networking/firezone/index.md +++ b/website/integrations/networking/firezone/index.md @@ -4,6 +4,8 @@ sidebar_label: Firezone support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Firezone? > Firezone is an open-source remote access platform built on WireGuard®, a modern VPN protocol that's 4-6x faster than OpenVPN. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Firezone with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -34,7 +38,7 @@ To support the integration of Firezone with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://firezone.company/auth/oidc/authentik/callback/`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://firezone.company/auth/oidc/authentik/callback/`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/networking/gravity/index.md b/website/integrations/networking/gravity/index.md index 01384e25f6..8c4aae2c9e 100644 --- a/website/integrations/networking/gravity/index.md +++ b/website/integrations/networking/gravity/index.md @@ -4,6 +4,8 @@ sidebar_label: Gravity support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Gravity? > Gravity is a fully-replicated DNS, DHCP, and TFTP server powered by [etcd](https://etcd.io/), offering features like built-in caching, ad/privacy blocking, automatic DNS registration, and metric tracking. @@ -27,6 +29,8 @@ Gravity automatically triggers SSO authentication when configured. To prevent th ## authentik configuration + + To support the integration of Gravity with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Gravity with authentik, you need to create an appl - **Choose a Provider type**: Select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: Provide a name (or accept the auto-provided name), choose the authorization flow for this provider, and configure the following required settings: - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://gravity.company/auth/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://gravity.company/auth/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: Create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/networking/headscale/index.md b/website/integrations/networking/headscale/index.md index 2fa1fd81c6..5cad73276e 100644 --- a/website/integrations/networking/headscale/index.md +++ b/website/integrations/networking/headscale/index.md @@ -4,6 +4,8 @@ sidebar_label: Headscale support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Headscale? > Headscale is an open source alternative to the Tailscale coordination server and can be self-hosted for a single tailnet. Headscale is a re-implemented version of the Tailscale coordination server, developed independently and completely separate from Tailscale, with its own independent community of users and developers. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Headscale with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Headscale with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://headscale.company/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://headscale.company/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/networking/hoop.dev/index.md b/website/integrations/networking/hoop.dev/index.md index c8307cd3fd..679e85679d 100644 --- a/website/integrations/networking/hoop.dev/index.md +++ b/website/integrations/networking/hoop.dev/index.md @@ -4,6 +4,8 @@ sidebar_label: Hoop.dev support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Hoop.dev? > Hoop.dev is an access gateway for databases and servers with AI-powered automations that eliminate cumbersome access policies and break-glass workflows without compromising security. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Hoop.dev with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Hoop.dev with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://hoop.company/api/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://hoop.company/api/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/networking/netbird/index.mdx b/website/integrations/networking/netbird/index.mdx index 1ae5d51621..4ce088796e 100644 --- a/website/integrations/networking/netbird/index.mdx +++ b/website/integrations/networking/netbird/index.mdx @@ -4,6 +4,7 @@ sidebar_label: NetBird support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -41,6 +42,8 @@ NetBird can use authentik in two ways: ## authentik configuration + + To support adding authentik as an external identity provider in NetBird, you need to create an application/provider pair and application entitlements in authentik. ### Create an application and provider in authentik @@ -80,7 +83,7 @@ Name each entitlement exactly as the NetBird group value that NetBird should syn - **Issuer**: `https://authentik.company/application/o//` 4. Copy the redirect URL shown by NetBird. Do not complete the provider setup yet. 5. Return to authentik, navigate to **Applications** > **Providers**, and edit the NetBird provider. -6. Under **Redirect URIs/Origins**, add the redirect URL from NetBird as a `Strict` redirect. +6. Under **Redirect URIs/Origins**, add the redirect URL from NetBird as a `Strict` `Authorization` redirect. 7. Click **Update**. 8. Return to NetBird and complete the identity provider setup. @@ -109,8 +112,8 @@ To support replacing NetBird's embedded IdP with authentik, you need to create a - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** value because it will be required later. - Set **Client type** to `Public`. - - Add a `Strict` redirect URI to `http://localhost:53000`. - - Add a `Regex` redirect URI to `https://netbird.company/.*`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `http://localhost:53000`. + - Add a **Redirect URI** of type `Regex` `Authorization` as `https://netbird.company/.*`. - Select any available signing key. - Under **Advanced protocol settings**, set **Access Code Validity** to `minutes=10`. - Under **Advanced protocol settings**, set **Subject Mode** to `Based on the User's ID`. diff --git a/website/integrations/networking/pangolin/index.mdx b/website/integrations/networking/pangolin/index.mdx index 1b9c1f9d9c..c25c233df5 100644 --- a/website/integrations/networking/pangolin/index.mdx +++ b/website/integrations/networking/pangolin/index.mdx @@ -4,6 +4,8 @@ sidebar_label: Pangolin support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is Pangolin? > Pangolin is a self-hosted tunneled reverse proxy server with identity and access control, designed to securely expose private resources on distributed networks. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Pangolin with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Pangolin with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, and **Client Secret** values because they will be required later. - - Temporarily set **Redirect URI** to `https://temp.temp`. + - Temporarily add a **Redirect URI** of type `Strict` `Authorization` as `https://temp.temp`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. @@ -61,7 +65,7 @@ To support the integration of Pangolin with authentik, you need to create an app 1. Log in to authentik as an administrator and open the authentik Admin interface. 2. Navigate to **Applications** > **Providers** and click the **Edit** icon of the newly created Pangolin provider. -3. Set the **Redirect URI** to the value taken from Pangolin (e.g. `https://pangolin.company/auth/idp//oidc/callback`). +3. Add a **Redirect URI** of type `Strict` `Authorization` as the value taken from Pangolin (e.g. `https://pangolin.company/auth/idp//oidc/callback`). 4. Click **Update**. ## Configuration verification diff --git a/website/integrations/networking/tailscale/index.md b/website/integrations/networking/tailscale/index.md index 3df0c2dd67..859640e4a6 100644 --- a/website/integrations/networking/tailscale/index.md +++ b/website/integrations/networking/tailscale/index.md @@ -4,6 +4,8 @@ sidebar_label: Tailscale support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Tailscale? > Tailscale is a mesh VPN service that creates secure, encrypted, peer-to-peer connections between devices across different networks using the WireGuard protocol. @@ -42,6 +44,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Tailscale with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -52,7 +56,7 @@ To support the integration of Tailscale with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://login.tailscale.com/a/oauth_response`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://login.tailscale.com/a/oauth_response`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/networking/technitium/index.md b/website/integrations/networking/technitium/index.md index c34f85e40d..698b8b630f 100644 --- a/website/integrations/networking/technitium/index.md +++ b/website/integrations/networking/technitium/index.md @@ -4,6 +4,8 @@ sidebar_label: Technitium DNS support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Technitium DNS? > Technitium DNS Server is a free, open source, cross-platform, authoritative and recursive DNS server that can be self-hosted for privacy and security, software development, and testing on small to medium-sized networks. @@ -25,6 +27,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Technitium DNS with authentik, you need to create a scope mapping, an application/provider pair, and application entitlements in authentik. ### Create a scope mapping in authentik @@ -59,7 +63,7 @@ Technitium DNS uses the `roles` claim to map SSO users to local groups. Create a - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - Set **Client type** to `Confidential`. - - Set a `Strict` redirect URI to `https://technitium.company/sso/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://technitium.company/sso/callback`. - Select any available signing key. - Ensure that the `openid`, `email`, and `profile` scopes are selected. Remove the `email` scope if you prefer usernames to use the preferred username claim instead of the email address. - Under **Advanced protocol settings** > **Selected Scopes**, add the scope mapping that you created in the previous section. diff --git a/website/integrations/platforms/budibase/index.md b/website/integrations/platforms/budibase/index.md index 693a7d7ac0..d2a45e6c0e 100644 --- a/website/integrations/platforms/budibase/index.md +++ b/website/integrations/platforms/budibase/index.md @@ -4,6 +4,8 @@ sidebar_label: Budibase support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Budibase? > Budibase is an open source low-code platform, and the easiest way to build internal tools that improve productivity. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Budibase with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of Budibase with authentik, you need to create an app - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://budibase.company/api/global/auth/oidc/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://budibase.company/api/global/auth/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/platforms/drupal/index.md b/website/integrations/platforms/drupal/index.md index 0afc315b4c..89d4b8b05e 100644 --- a/website/integrations/platforms/drupal/index.md +++ b/website/integrations/platforms/drupal/index.md @@ -4,6 +4,8 @@ sidebar_label: Drupal support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Drupal? > Drupal is a free and open-source content management system written in PHP and @@ -28,6 +30,8 @@ There are many different modules for Drupal that allow you to set up SSO using d ## authentik configuration + + To support the integration of Drupal with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -38,7 +42,7 @@ To support the integration of Drupal with authentik, you need to create an appli - **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings. The **slug** will be used in URLs and should match the `drupal-slug` placeholder defined earlier. - **Choose a Provider type**: select **OAuth2/OpenID Provider** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), and configure the following required settings: - - Add the following **Redirect URI**: `https://drupal.company/openid-connect/generic` + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://drupal.company/openid-connect/generic`. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. 3. Click **Submit** to save the new application and provider. diff --git a/website/integrations/platforms/personio/index.md b/website/integrations/platforms/personio/index.md index 74b89535d1..62506db268 100644 --- a/website/integrations/platforms/personio/index.md +++ b/website/integrations/platforms/personio/index.md @@ -4,6 +4,8 @@ sidebar_label: Personio support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Personio? > Personio is an HR software platform for managing core HR processes such as recruiting, onboarding, payroll, time tracking, and performance management. @@ -22,6 +24,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Personio with authentik, you need to create an application/provider pair in authentik. ### Copy the Personio callback URL @@ -40,7 +44,7 @@ To support the integration of Personio with authentik, you need to create an app - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - Set the **Client type** to `Confidential`. - - Add two `Strict` redirect URIs: + - Add two **Redirect URIs** of type `Strict` `Authorization`: - The **Callback URLs/Redirect URIs** value from Personio. - `https://login.personio.com/login/callback` - Select any available signing key. diff --git a/website/integrations/platforms/pocketbase/index.md b/website/integrations/platforms/pocketbase/index.md index 747e5bbbca..643fd453e5 100644 --- a/website/integrations/platforms/pocketbase/index.md +++ b/website/integrations/platforms/pocketbase/index.md @@ -4,6 +4,8 @@ sidebar_label: PocketBase support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is PocketBase? > PocketBase is an open source backend consisting of an embedded SQLite database, realtime subscriptions, built-in auth management, a dashboard UI, and a REST-like API. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of PocketBase with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -33,7 +37,7 @@ To support the integration of PocketBase with authentik, you need to create an a - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://pocketbase.company/api/oauth2-redirect`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://pocketbase.company/api/oauth2-redirect`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/platforms/wordpress/index.md b/website/integrations/platforms/wordpress/index.md index 9f9ea62820..8eb025e5e1 100644 --- a/website/integrations/platforms/wordpress/index.md +++ b/website/integrations/platforms/wordpress/index.md @@ -4,6 +4,8 @@ sidebar_label: WordPress support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is WordPress? > WordPress is an open source publishing platform used to create websites, blogs, and other web content. @@ -27,6 +29,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of WordPress with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider @@ -37,7 +41,7 @@ To support the integration of WordPress with authentik, you need to create an ap - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and application **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://wp.company/wp-admin/admin-ajax.php?action=openid-connect-authorize`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://wp.company/wp-admin/admin-ajax.php?action=openid-connect-authorize`. - Select any available signing key. - Under **Advanced protocol settings** > **Scopes**, add `authentik default OAuth Mapping: OpenID 'offline_access'` to the **Selected Scopes** list. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/security/1password/index.mdx b/website/integrations/security/1password/index.mdx index 18d81c8f8e..bae482d09f 100644 --- a/website/integrations/security/1password/index.mdx +++ b/website/integrations/security/1password/index.mdx @@ -4,6 +4,8 @@ sidebar_label: 1Password support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is 1Password? > 1Password is a password management tool that simplifies the process of creating, storing, and sharing passwords. It allows you to create strong, unique passwords, securely store them in a vault, and automatically fill them in when needed. @@ -24,6 +26,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of 1Password with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -35,7 +39,7 @@ To support the integration of 1Password with authentik, you need to create an ap - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Set **Client Type** to `Public`. - Note the **Client ID** and **slug** values because they will be required later. - - Add two `Strict` redirect URIs and set them to `https://your-domain.1password.com/sso/oidc/redirect/` and `onepassword://sso/oidc/redirect`. + - Add two **Redirect URIs** of type `Strict` `Authorization` as `https://your-domain.1password.com/sso/oidc/redirect/` and `onepassword://sso/oidc/redirect`. - Select any available **Signing Key**. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. If you add a SCIM provider as a backchannel provider later, only users who can view this application are synchronized. diff --git a/website/integrations/security/bitwarden/index.mdx b/website/integrations/security/bitwarden/index.mdx index 10bde10045..9ec8306744 100644 --- a/website/integrations/security/bitwarden/index.mdx +++ b/website/integrations/security/bitwarden/index.mdx @@ -4,6 +4,7 @@ sidebar_label: Bitwarden support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; import SAMLProvider20265Warning from "../../_saml-provider-2026-5-warning.mdx"; import TabItem from "@theme/TabItem"; import Tabs from "@theme/Tabs"; @@ -43,6 +44,8 @@ You can configure Bitwarden to use either OIDC or SAML; this guide explains both ## authentik configuration + + To support the integration of Bitwarden with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -55,14 +58,14 @@ To support the integration of Bitwarden with authentik, you need to create an ap - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - Add the redirect URIs for your Bitwarden deployment: - For Bitwarden Cloud US: - - Set a `Strict` `Authorization` redirect URI to `https://sso.bitwarden.com/oidc-signin`. - - Set a `Strict` `Post Logout` redirect URI to `https://sso.bitwarden.com/oidc-signedout`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://sso.bitwarden.com/oidc-signin`. + - Add a **Redirect URI** of type `Strict` `Post Logout` as `https://sso.bitwarden.com/oidc-signedout`. - For Bitwarden Cloud EU: - - Set a `Strict` `Authorization` redirect URI to `https://sso.bitwarden.eu/oidc-signin`. - - Set a `Strict` `Post Logout` redirect URI to `https://sso.bitwarden.eu/oidc-signedout`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://sso.bitwarden.eu/oidc-signin`. + - Add a **Redirect URI** of type `Strict` `Post Logout` as `https://sso.bitwarden.eu/oidc-signedout`. - For self-hosted Bitwarden: - - Set a `Strict` `Authorization` redirect URI to `https://bitwarden.company/sso/oidc-signin`. - - Set a `Strict` `Post Logout` redirect URI to `https://bitwarden.company/sso/oidc-signedout`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://bitwarden.company/sso/oidc-signin`. + - Add a **Redirect URI** of type `Strict` `Post Logout` as `https://bitwarden.company/sso/oidc-signedout`. - Select any available **Signing Key**. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. diff --git a/website/integrations/security/cloudflare-access/index.md b/website/integrations/security/cloudflare-access/index.md index bbd635f768..61e736c569 100644 --- a/website/integrations/security/cloudflare-access/index.md +++ b/website/integrations/security/cloudflare-access/index.md @@ -4,6 +4,8 @@ sidebar_label: Cloudflare Access support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Cloudflare Access? > Cloudflare Access is a secure, cloud-based zero-trust solution for managing and authenticating user access to internal applications and resources. @@ -29,6 +31,8 @@ Looking to integrate authentik with your Cloudflare Dashboard? See our [integrat ## authentik configuration + + To support the integration of Cloudflare Access with authentik, you need to create an application/provider pair in authentik. Cloudflare uses your Cloudflare Access team name in the callback URL. You can find the team name in the Cloudflare dashboard under **Settings** > **Team name and domain** > **Team name**. @@ -41,7 +45,7 @@ Cloudflare uses your Cloudflare Access team name in the callback URL. You can fi - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Add one `Strict` redirect URI and set it to `https://company.cloudflareaccess.com/cdn-cgi/access/callback`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://company.cloudflareaccess.com/cdn-cgi/access/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. 3. Click **Submit** to save the new application and provider. diff --git a/website/integrations/security/hashicorp-vault/index.md b/website/integrations/security/hashicorp-vault/index.md index f31df5dab4..9f14ceac9c 100644 --- a/website/integrations/security/hashicorp-vault/index.md +++ b/website/integrations/security/hashicorp-vault/index.md @@ -4,6 +4,8 @@ sidebar_label: HashiCorp Vault support_level: authentik --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is HashiCorp Vault? > HashiCorp Vault secures, stores, and controls access to tokens, passwords, certificates, encryption keys, and other sensitive data. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of HashiCorp Vault with authentik, you need to create an application and provider pair in authentik. ### Create an application and provider @@ -33,7 +37,7 @@ To support the integration of HashiCorp Vault with authentik, you need to create - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set two `Strict` redirect URIs to `https://vault.company/ui/vault/auth/oidc/oidc/callback` and `http://localhost:8250/oidc/callback`. + - Add two **Redirect URIs** of type `Strict` `Authorization` as `https://vault.company/ui/vault/auth/oidc/oidc/callback` and `http://localhost:8250/oidc/callback`. - Select any available signing key. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. 3. Click **Submit** to save the new application and provider. diff --git a/website/integrations/security/vaultwarden/index.md b/website/integrations/security/vaultwarden/index.md index a039ae91e5..9b588144d8 100644 --- a/website/integrations/security/vaultwarden/index.md +++ b/website/integrations/security/vaultwarden/index.md @@ -4,6 +4,8 @@ sidebar_label: Vaultwarden support_level: community --- +import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; + ## What is Vaultwarden? > Vaultwarden is an alternative server implementation of the Bitwarden Client API, written in Rust and compatible with official Bitwarden clients, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal. @@ -23,6 +25,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of Vaultwarden with authentik, you need to create an application/provider pair in authentik. ### Create custom scope mapping @@ -53,7 +57,7 @@ Vaultwarden requires the email scope to return either `email_verified: True` or - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later. - - Set a `Strict` redirect URI to `https://vaultwarden.company/identity/connect/oidc-signin`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://vaultwarden.company/identity/connect/oidc-signin`. - Select any available signing key. - Under **Advanced protocol settings**: - Set **Access token validity** to more than 5 minutes. diff --git a/website/integrations/security/xcreds/index.mdx b/website/integrations/security/xcreds/index.mdx index 81be6f33d9..baaf24a556 100644 --- a/website/integrations/security/xcreds/index.mdx +++ b/website/integrations/security/xcreds/index.mdx @@ -4,6 +4,8 @@ sidebar_label: XCreds support_level: community --- +import RedirectURI20265Note from "../../_redirect-uri-2026-5-note.mdx"; + ## What is XCreds? > XCreds is an open source project for synchronizing IdP passwords with macOS login passwords. XCreds replaces the macOS login window to provide authentication to the cloud provider; a user enters their cloud password for authentication and XCreds keeps the local Mac password synchronized with the cloud password. @@ -26,6 +28,8 @@ This documentation lists only the settings that you need to change from their de ## authentik configuration + + To support the integration of XCreds with authentik, you need to create an application/provider pair in authentik. ### Create an application and provider in authentik @@ -36,7 +40,7 @@ To support the integration of XCreds with authentik, you need to create an appli - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - Note the **Client ID** and **Client Secret** values because they will be required later. - - Set a `Strict` redirect URI to `https://127.0.0.1/xcreds`. + - Add a **Redirect URI** of type `Strict` `Authorization` as `https://127.0.0.1/xcreds`. - Select any available signing key. - Under **Advanced protocol settings**, add `authentik default OAuth Mapping: OpenID 'offline_access'` to **Selected Scopes**. - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **Application Dashboard** page. From 9457696385e5adea715c8ca95f54ad1ed03453c3 Mon Sep 17 00:00:00 2001 From: "Jens L." Date: Fri, 12 Jun 2026 14:09:41 +0200 Subject: [PATCH 68/68] root: bump pyo3 (#23036) Signed-off-by: Jens Langhammer --- Cargo.lock | 21 ++++++++++----------- Cargo.toml | 4 ++-- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4ec2a1c779..08179d8e4c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2642,9 +2642,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.28.3" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12" +checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c" dependencies = [ "libc", "once_cell", @@ -2656,18 +2656,18 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.28.3" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e" +checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.28.3" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e" +checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b" dependencies = [ "libc", "pyo3-build-config", @@ -2675,9 +2675,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.28.3" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813" +checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -2687,13 +2687,12 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.28.3" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb" +checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362" dependencies = [ "heck", "proc-macro2", - "pyo3-build-config", "quote", "syn", ] diff --git a/Cargo.toml b/Cargo.toml index 520f596bac..802f80573d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,8 +48,8 @@ metrics-exporter-prometheus = { version = "= 0.18.3", default-features = false } nix = { version = "= 0.31.3", features = ["hostname", "signal"] } notify = "= 8.2.0" pin-project-lite = "= 0.2.17" -pyo3 = "= 0.28.3" -pyo3-build-config = "= 0.28.3" +pyo3 = "= 0.29.0" +pyo3-build-config = "= 0.29.0" regex = "= 1.12.3" reqwest = { version = "= 0.13.4", features = [ "form",