diff --git a/README.md b/README.md index 290cdc0..4543e8a 100644 --- a/README.md +++ b/README.md @@ -336,6 +336,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **27.04.23:** - [Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) authelia-location.conf, authelia-server.conf, authentik-location.conf, authentik-server.conf - Simplify auth configs and fix Set-Cookie header bug. * **13.04.23:** - [Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) nginx.conf, authelia-location.conf, authentik-location.conf, and site-confs/default.conf - Move ssl.conf include to default.conf. Remove Authorization headers in authelia. Sort proxy_set_header in authelia and authentik. * **25.03.23:** - Fix renewal post hook. * **10.03.23:** - Cleanup unused csr and keys folders. See [certbot 2.3.0 release notes](https://github.com/certbot/certbot/releases/tag/v2.3.0). diff --git a/readme-vars.yml b/readme-vars.yml index cf36fab..f36b368 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -154,6 +154,7 @@ app_setup_block: | # changelog changelogs: + - { date: "27.04.23:", desc: "[Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) authelia-location.conf, authelia-server.conf, authentik-location.conf, authentik-server.conf - Simplify auth configs and fix Set-Cookie header bug." } - { date: "13.04.23:", desc: "[Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) nginx.conf, authelia-location.conf, authentik-location.conf, and site-confs/default.conf - Move ssl.conf include to default.conf. Remove Authorization headers in authelia. Sort proxy_set_header in authelia and authentik." } - { date: "25.03.23:", desc: "Fix renewal post hook." } - { date: "10.03.23:", desc: "Cleanup unused csr and keys folders. See [certbot 2.3.0 release notes](https://github.com/certbot/certbot/releases/tag/v2.3.0)." } diff --git a/root/defaults/nginx/authelia-location.conf.sample b/root/defaults/nginx/authelia-location.conf.sample index ae4d630..5fd7d28 100644 --- a/root/defaults/nginx/authelia-location.conf.sample +++ b/root/defaults/nginx/authelia-location.conf.sample @@ -1,25 +1,27 @@ -## Version 2023/04/13 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-location.conf.sample +## Version 2023/04/27 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-location.conf.sample # Make sure that your authelia container is in the same user defined bridge network and is named authelia # Rename /config/nginx/proxy-confs/authelia.subdomain.conf.sample to /config/nginx/proxy-confs/authelia.subdomain.conf # Make sure that the authelia configuration.yml has 'path: "authelia"' defined -## Send a subrequest to Authelia to verify if the user is authenticated and has permission to access the resource. +## Send a subrequest to Authelia to verify if the user is authenticated and has permission to access the resource auth_request /authelia/api/verify; -## If the subreqest returns 200 pass to the backend, if the subrequest returns 401 redirect to the portal. +## If the subreqest returns 200 pass to the backend, if the subrequest returns 401 redirect to the portal error_page 401 = @authelia_proxy_signin; -## Translate response headers from Authelia into variables +## Translate the user information response headers from the auth subrequest into variables auth_request_set $email $upstream_http_remote_email; auth_request_set $groups $upstream_http_remote_groups; auth_request_set $name $upstream_http_remote_name; auth_request_set $user $upstream_http_remote_user; -## Inject the response header variables into the request made to the actual upstream +## Inject the user information into the request made to the actual upstream proxy_set_header Remote-Email $email; proxy_set_header Remote-Groups $groups; proxy_set_header Remote-Name $name; proxy_set_header Remote-User $user; -## Include the Set-Cookie header if present. +## Translate the Set-Cookie response header from the auth subrequest into a variable auth_request_set $set_cookie $upstream_http_set_cookie; -add_header Set-Cookie $set_cookie; + +## Translate the Location response header from the auth subrequest into a variable +auth_request_set $signin_url $upstream_http_location; diff --git a/root/defaults/nginx/authelia-server.conf.sample b/root/defaults/nginx/authelia-server.conf.sample index cbc1a86..17d5a93 100644 --- a/root/defaults/nginx/authelia-server.conf.sample +++ b/root/defaults/nginx/authelia-server.conf.sample @@ -1,4 +1,4 @@ -## Version 2023/02/09 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-server.conf.sample +## Version 2023/04/27 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-server.conf.sample # Make sure that your authelia container is in the same user defined bridge network and is named authelia # Rename /config/nginx/proxy-confs/authelia.subdomain.conf.sample to /config/nginx/proxy-confs/authelia.subdomain.conf # Make sure that the authelia configuration.yml has 'path: "authelia"' defined @@ -19,9 +19,9 @@ location = /authelia/api/verify { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_authelia authelia; - proxy_pass http://$upstream_authelia:9091/authelia/api/verify; + proxy_pass http://$upstream_authelia:9091; - ## Include the Set-Cookie header if present. + ## Include the Set-Cookie header if present auth_request_set $set_cookie $upstream_http_set_cookie; add_header Set-Cookie $set_cookie; @@ -29,27 +29,25 @@ location = /authelia/api/verify { proxy_set_header Content-Length ""; } -# Virtual location for authelia 401 redirects +# virtual location for authelia 401 redirects location @authelia_proxy_signin { internal; - ## Set the $target_url variable based on the original request. - set_escape_uri $target_url $scheme://$http_host$request_uri; - - ## Include the Set-Cookie header if present. + ## Include the Set-Cookie header if present auth_request_set $set_cookie $upstream_http_set_cookie; add_header Set-Cookie $set_cookie; - ## Set $authelia_backend to route requests to the current domain by default - set $authelia_backend $http_host; - ## In order for Webauthn to work with multiple domains authelia must operate on a separate subdomain - ## To use authelia on a separate subdomain: - ## * comment the $authelia_backend line above - ## * rename /config/nginx/proxy-confs/authelia.conf.sample to /config/nginx/proxy-confs/authelia.conf - ## * make sure that your dns has a cname set for authelia - ## * uncomment the $authelia_backend line below and change example.com to your domain - ## * restart the swag container - #set $authelia_backend authelia.example.com; + ## Set the $target_url variable based on the original request + set_escape_uri $target_url $scheme://$http_host$request_uri; - return 302 https://$authelia_backend/authelia/?rd=$target_url; + ## Translate the Location response header from the auth subrequest into a variable + auth_request_set $signin_url $upstream_http_location; + + if ($signin_url = '') { + ## Set the $signin_url variable + set $signin_url https://$http_host/authelia/?rd=$target_url; + } + + ## Redirect to login + return 302 $signin_url; } diff --git a/root/defaults/nginx/authentik-location.conf.sample b/root/defaults/nginx/authentik-location.conf.sample index 39668c6..d27f681 100644 --- a/root/defaults/nginx/authentik-location.conf.sample +++ b/root/defaults/nginx/authentik-location.conf.sample @@ -1,26 +1,25 @@ -## Version 2023/04/13 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authentik-location.conf.sample +## Version 2023/04/27 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authentik-location.conf.sample # Make sure that your authentik container is in the same user defined bridge network and is named authentik-server # Rename /config/nginx/proxy-confs/authentik.subdomain.conf.sample to /config/nginx/proxy-confs/authentik.subdomain.conf -## Send a subrequest to Authentik to verify if the user is authenticated and has permission to access the resource. +## Send a subrequest to Authentik to verify if the user is authenticated and has permission to access the resource auth_request /outpost.goauthentik.io/auth/nginx; -## If the subreqest returns 200 pass to the backend, if the subrequest returns 401 redirect to the portal. +## If the subreqest returns 200 pass to the backend, if the subrequest returns 401 redirect to the portal error_page 401 = @goauthentik_proxy_signin; -## Translate response headers from Authentik into variables +## Translate the user information response headers from the auth subrequest into variables auth_request_set $authentik_email $upstream_http_x_authentik_email; auth_request_set $authentik_groups $upstream_http_x_authentik_groups; auth_request_set $authentik_name $upstream_http_x_authentik_name; auth_request_set $authentik_uid $upstream_http_x_authentik_uid; auth_request_set $authentik_username $upstream_http_x_authentik_username; -## Inject the response header variables into the request made to the actual upstream +## Inject the user information into the request made to the actual upstream proxy_set_header X-authentik-email $authentik_email; proxy_set_header X-authentik-groups $authentik_groups; proxy_set_header X-authentik-name $authentik_name; proxy_set_header X-authentik-uid $authentik_uid; proxy_set_header X-authentik-username $authentik_username; -## Include the Set-Cookie header if present. +## Translate the Set-Cookie response header from the auth subrequest into a variable auth_request_set $set_cookie $upstream_http_set_cookie; -add_header Set-Cookie $set_cookie; diff --git a/root/defaults/nginx/authentik-server.conf.sample b/root/defaults/nginx/authentik-server.conf.sample index 08ac225..aadaf62 100644 --- a/root/defaults/nginx/authentik-server.conf.sample +++ b/root/defaults/nginx/authentik-server.conf.sample @@ -1,4 +1,4 @@ -## Version 2023/02/09 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authentik-server.conf.sample +## Version 2023/04/27 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authentik-server.conf.sample # Make sure that your authentik container is in the same user defined bridge network and is named authentik-server # Rename /config/nginx/proxy-confs/authentik.subdomain.conf.sample to /config/nginx/proxy-confs/authentik.subdomain.conf @@ -18,9 +18,9 @@ location = /outpost.goauthentik.io/auth/nginx { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_authentik authentik-server; - proxy_pass http://$upstream_authentik:9000/outpost.goauthentik.io/auth/nginx; + proxy_pass http://$upstream_authentik:9000; - ## Include the Set-Cookie header if present. + ## Include the Set-Cookie header if present auth_request_set $set_cookie $upstream_http_set_cookie; add_header Set-Cookie $set_cookie; @@ -28,18 +28,20 @@ location = /outpost.goauthentik.io/auth/nginx { proxy_set_header Content-Length ""; } -# Virtual location for authentik 401 redirects +# virtual location for authentik 401 redirects location @goauthentik_proxy_signin { internal; - ## Set the $target_url variable based on the original request. - set_escape_uri $target_url $scheme://$http_host$request_uri; - - ## Include the Set-Cookie header if present. + ## Include the Set-Cookie header if present auth_request_set $set_cookie $upstream_http_set_cookie; add_header Set-Cookie $set_cookie; - ## Set $authentik_backend to route requests to the current domain by default - set $authentik_backend $http_host; - return 302 https://$authentik_backend/outpost.goauthentik.io/start?rd=$target_url; + ## Set the $target_url variable based on the original request + set_escape_uri $target_url $scheme://$http_host$request_uri; + + ## Set the $signin_url variable + set $signin_url https://$http_host/outpost.goauthentik.io/start?rd=$target_url; + + ## Redirect to login + return 302 $signin_url; }