mirror of
				https://github.com/linuxserver/docker-swag.git
				synced 2025-10-31 21:17:42 +09:00 
			
		
		
		
	Merge pull request #332 from linuxserver/nemchik-tik
Unify auth config approach
This commit is contained in:
		| @@ -335,7 +335,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 | ||||
|  | ||||
| ## Versions | ||||
|  | ||||
| * **01.02.23:** - Add includable confs for authentik. | ||||
| * **09.02.23:** - [Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) proxy.conf, authelia-location.conf and authelia-server.conf - Add Authentik configs, update Authelia configs. | ||||
| * **21.01.23:** - Unpin certbot version (allow certbot 2.x). !!BREAKING CHANGE!! We are temporarily removing the certbot porkbun plugin until a new version is released that is compatible with certbot 2.x. | ||||
| * **20.01.23:** - Rebase to alpine 3.17 with php8.1. | ||||
| * **16.01.23:** - Remove nchan module because it keeps causing crashes. | ||||
|   | ||||
| @@ -154,7 +154,7 @@ app_setup_block: | | ||||
|  | ||||
| # changelog | ||||
| changelogs: | ||||
|   - { date: "01.02.23:", desc: "Add includable confs for authentik" } | ||||
|   - { date: "09.02.23:", desc: "[Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) proxy.conf, authelia-location.conf and authelia-server.conf - Add Authentik configs, update Authelia configs." } | ||||
|   - { date: "21.01.23:", desc: "Unpin certbot version (allow certbot 2.x). !!BREAKING CHANGE!! We are temporarily removing the certbot porkbun plugin until a new version is released that is compatible with certbot 2.x." } | ||||
|   - { date: "20.01.23:", desc: "Rebase to alpine 3.17 with php8.1." } | ||||
|   - { date: "16.01.23:", desc: "Remove nchan module because it keeps causing crashes." } | ||||
|   | ||||
| @@ -1,15 +1,29 @@ | ||||
| ## Version 2022/08/20 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-location.conf.sample | ||||
| ## Version 2023/02/09 - 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.conf.sample to /config/nginx/proxy-confs/authelia.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. | ||||
| auth_request /authelia/api/verify; | ||||
| auth_request_set $target_url $scheme://$http_host$request_uri; | ||||
| ## 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 | ||||
| auth_request_set $user $upstream_http_remote_user; | ||||
| auth_request_set $groups $upstream_http_remote_groups; | ||||
| auth_request_set $name $upstream_http_remote_name; | ||||
| auth_request_set $email $upstream_http_remote_email; | ||||
| auth_request_set $authorization $upstream_http_authorization; | ||||
| auth_request_set $proxy_authorization $upstream_http_proxy_authorization; | ||||
|  | ||||
| ## Inject the response header variables into the request made to the actual upstream | ||||
| proxy_set_header Remote-User $user; | ||||
| proxy_set_header Remote-Groups $groups; | ||||
| proxy_set_header Remote-Name $name; | ||||
| proxy_set_header Remote-Email $email; | ||||
| error_page 401 =302 https://$http_host/authelia/?rd=$target_url; | ||||
| proxy_set_header Authorization $authorization; | ||||
| proxy_set_header Proxy-Authorization $proxy_authorization; | ||||
|  | ||||
| ## Include the Set-Cookie header if present. | ||||
| auth_request_set $set_cookie $upstream_http_set_cookie; | ||||
| add_header Set-Cookie $set_cookie; | ||||
|   | ||||
| @@ -1,50 +1,55 @@ | ||||
| ## Version 2022/09/22 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-server.conf.sample | ||||
| ## Version 2023/02/09 - 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.conf.sample to /config/nginx/proxy-confs/authelia.conf | ||||
| # Make sure that the authelia configuration.yml has 'path: "authelia"' defined | ||||
|  | ||||
| # location for authelia subfolder requests | ||||
| location ^~ /authelia { | ||||
|     auth_request off; # requests to this subfolder must be accessible without authentication | ||||
|     include /config/nginx/proxy.conf; | ||||
|     include /config/nginx/resolver.conf; | ||||
|     set $upstream_authelia authelia; | ||||
|     proxy_pass http://$upstream_authelia:9091; | ||||
| } | ||||
|  | ||||
| # location for authelia auth requests | ||||
| location = /authelia/api/verify { | ||||
|     internal; | ||||
|  | ||||
|     include /config/nginx/proxy.conf; | ||||
|     include /config/nginx/resolver.conf; | ||||
|     set $upstream_authelia authelia; | ||||
|     proxy_pass http://$upstream_authelia:9091/authelia/api/verify; | ||||
|  | ||||
|     ## Include the Set-Cookie header if present. | ||||
|     auth_request_set $set_cookie $upstream_http_set_cookie; | ||||
|     add_header Set-Cookie $set_cookie; | ||||
|  | ||||
|     proxy_pass_request_body off; | ||||
|     proxy_pass http://$upstream_authelia:9091; | ||||
|     proxy_set_header Content-Length ""; | ||||
|  | ||||
|     # Timeout if the real server is dead | ||||
|     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; | ||||
|  | ||||
|     # [REQUIRED] Needed by Authelia to check authorizations of the resource. | ||||
|     # Provide either X-Original-URL and X-Forwarded-Proto or | ||||
|     # X-Forwarded-Proto, X-Forwarded-Host and X-Forwarded-Uri or both. | ||||
|     # Those headers will be used by Authelia to deduce the target url of the user. | ||||
|     # Basic Proxy Config | ||||
|     client_body_buffer_size 128k; | ||||
|     proxy_set_header Host $host; | ||||
|     proxy_set_header X-Original-URL $scheme://$http_host$request_uri; | ||||
|     proxy_set_header X-Real-IP $remote_addr; | ||||
|     proxy_set_header X-Forwarded-For $remote_addr; | ||||
|     proxy_set_header X-Forwarded-Method $request_method; | ||||
|     proxy_set_header X-Forwarded-Proto $scheme; | ||||
|     proxy_set_header X-Forwarded-Host $http_host; | ||||
|     proxy_set_header X-Forwarded-Uri $request_uri; | ||||
|     proxy_set_header X-Forwarded-Ssl on; | ||||
|     proxy_redirect  http://  $scheme://; | ||||
|     proxy_http_version 1.1; | ||||
|     proxy_set_header Connection ""; | ||||
|     proxy_cache_bypass $cookie_session; | ||||
|     proxy_no_cache $cookie_session; | ||||
|     proxy_buffers 4 32k; | ||||
|  | ||||
|     # Advanced Proxy Config | ||||
|     send_timeout 5m; | ||||
|     proxy_read_timeout 240; | ||||
|     proxy_send_timeout 240; | ||||
|     proxy_connect_timeout 240; | ||||
| } | ||||
|  | ||||
| # 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. | ||||
|     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; | ||||
|  | ||||
|     return 302 https://$authelia_backend/authelia/?rd=$target_url; | ||||
| } | ||||
|   | ||||
| @@ -1,23 +0,0 @@ | ||||
| ## Version 2022/08/20  | ||||
| # Make sure that your authentik container is in the same user defined bridge network and is named authentik-server | ||||
|  | ||||
| ############################## | ||||
| # authentik-specific config | ||||
| ############################## | ||||
| auth_request     /outpost.goauthentik.io/auth/nginx; | ||||
| error_page       401 = @goauthentik_proxy_signin; | ||||
| auth_request_set $auth_cookie $upstream_http_set_cookie; | ||||
| add_header       Set-Cookie $auth_cookie; | ||||
|  | ||||
| # translate headers from the outposts back to the actual upstream | ||||
| auth_request_set $authentik_username $upstream_http_x_authentik_username; | ||||
| auth_request_set $authentik_groups $upstream_http_x_authentik_groups; | ||||
| auth_request_set $authentik_email $upstream_http_x_authentik_email; | ||||
| auth_request_set $authentik_name $upstream_http_x_authentik_name; | ||||
| auth_request_set $authentik_uid $upstream_http_x_authentik_uid; | ||||
|  | ||||
| proxy_set_header X-authentik-username $authentik_username; | ||||
| proxy_set_header X-authentik-groups $authentik_groups; | ||||
| proxy_set_header X-authentik-email $authentik_email; | ||||
| proxy_set_header X-authentik-name $authentik_name; | ||||
| proxy_set_header X-authentik-uid $authentik_uid; | ||||
							
								
								
									
										26
									
								
								root/defaults/nginx/authentik-location.conf.sample
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								root/defaults/nginx/authentik-location.conf.sample
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| ## Version 2023/02/09 - 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.conf.sample to /config/nginx/proxy-confs/authentik.conf | ||||
|  | ||||
| ## 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. | ||||
| error_page 401 = @goauthentik_proxy_signin; | ||||
|  | ||||
| ## Translate response headers from Authentik into variables | ||||
| auth_request_set $authentik_username $upstream_http_x_authentik_username; | ||||
| auth_request_set $authentik_groups $upstream_http_x_authentik_groups; | ||||
| auth_request_set $authentik_email $upstream_http_x_authentik_email; | ||||
| auth_request_set $authentik_name $upstream_http_x_authentik_name; | ||||
| auth_request_set $authentik_uid $upstream_http_x_authentik_uid; | ||||
|  | ||||
| ## Inject the response header variables into the request made to the actual upstream | ||||
| proxy_set_header X-authentik-username $authentik_username; | ||||
| proxy_set_header X-authentik-groups $authentik_groups; | ||||
| proxy_set_header X-authentik-email $authentik_email; | ||||
| proxy_set_header X-authentik-name $authentik_name; | ||||
| proxy_set_header X-authentik-uid $authentik_uid; | ||||
|  | ||||
| ## Include the Set-Cookie header if present. | ||||
| auth_request_set $set_cookie $upstream_http_set_cookie; | ||||
| add_header Set-Cookie $set_cookie; | ||||
| @@ -1,27 +0,0 @@ | ||||
| ## Version 2022/09/22  | ||||
| # Make sure that your authentik container is in the same user defined bridge network and is named authentik-server | ||||
|  | ||||
|     # all requests to /outpost.goauthentik.io must be accessible without authentication | ||||
|     location /outpost.goauthentik.io { | ||||
|         include /config/nginx/resolver.conf; | ||||
|         set $upstream_authentik authentik-server; | ||||
|         proxy_pass              http://$upstream_authentik:9000/outpost.goauthentik.io; | ||||
|         # ensure the host of this vserver matches your external URL you've configured | ||||
|         # in authentik | ||||
|         proxy_set_header        Host $host; | ||||
|         proxy_set_header        X-Original-URL $scheme://$http_host$request_uri; | ||||
|         add_header              Set-Cookie $auth_cookie; | ||||
|         auth_request_set        $auth_cookie $upstream_http_set_cookie; | ||||
|         proxy_pass_request_body off; | ||||
|         proxy_set_header        Content-Length ""; | ||||
|     } | ||||
| 	 | ||||
| 	# Special location for when the /auth endpoint returns a 401, | ||||
|     # redirect to the /start URL which initiates SSO | ||||
|     location @goauthentik_proxy_signin { | ||||
|         internal; | ||||
|         add_header Set-Cookie $auth_cookie; | ||||
|         return 302 /outpost.goauthentik.io/start?rd=$request_uri; | ||||
|         # For domain level, use the below error_page to redirect to your authentik server with the full redirect path | ||||
|         # return 302 https://authentik.company/outpost.goauthentik.io/start?rd=$scheme://$http_host$request_uri; | ||||
|     } | ||||
							
								
								
									
										45
									
								
								root/defaults/nginx/authentik-server.conf.sample
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								root/defaults/nginx/authentik-server.conf.sample
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| ## Version 2023/02/09 - 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.conf.sample to /config/nginx/proxy-confs/authentik.conf | ||||
|  | ||||
| # location for authentik subfolder requests | ||||
| location ^~ /outpost.goauthentik.io { | ||||
|     auth_request off; # requests to this subfolder must be accessible without authentication | ||||
|     include /config/nginx/proxy.conf; | ||||
|     include /config/nginx/resolver.conf; | ||||
|     set $upstream_authentik authentik-server; | ||||
|     proxy_pass http://$upstream_authentik:9000; | ||||
| } | ||||
|  | ||||
| # location for authentik auth requests | ||||
| location = /outpost.goauthentik.io/auth/nginx { | ||||
|     internal; | ||||
|  | ||||
|     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; | ||||
|  | ||||
|     ## Include the Set-Cookie header if present. | ||||
|     auth_request_set $set_cookie $upstream_http_set_cookie; | ||||
|     add_header Set-Cookie $set_cookie; | ||||
|  | ||||
|     proxy_pass_request_body off; | ||||
|     proxy_set_header Content-Length ""; | ||||
| } | ||||
|  | ||||
| # 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. | ||||
|     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; | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| ## Version 2022/09/01 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/proxy.conf.sample | ||||
| ## Version 2023/02/09 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/proxy.conf.sample | ||||
|  | ||||
| # Timeout if the real server is dead | ||||
| proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; | ||||
| @@ -25,11 +25,13 @@ proxy_set_header Host $host; | ||||
| proxy_set_header Proxy ""; | ||||
| proxy_set_header Upgrade $http_upgrade; | ||||
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
| proxy_set_header X-Forwarded-Host $host:$server_port; | ||||
| proxy_set_header X-Forwarded-Host $host; | ||||
| proxy_set_header X-Forwarded-Method $request_method; | ||||
| proxy_set_header X-Forwarded-Port $server_port; | ||||
| proxy_set_header X-Forwarded-Proto $scheme; | ||||
| proxy_set_header X-Forwarded-Server $host; | ||||
| proxy_set_header X-Forwarded-Ssl on; | ||||
| proxy_set_header X-Forwarded-Uri $request_uri; | ||||
| proxy_set_header X-Original-Method $request_method; | ||||
| proxy_set_header X-Original-URL $scheme://$http_host$request_uri; | ||||
| proxy_set_header X-Real-IP $remote_addr; | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| ## Version 2022/10/03 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/site-confs/default.conf.sample | ||||
| ## Version 2023/02/09 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/site-confs/default.conf.sample | ||||
|  | ||||
| # redirect all traffic to https | ||||
| server { | ||||
| @@ -29,6 +29,9 @@ server { | ||||
|     # enable for Authelia (requires authelia-location.conf in the location block) | ||||
|     #include /config/nginx/authelia-server.conf; | ||||
|  | ||||
|     # enable for Authentik (requires authentik-location.conf in the location block) | ||||
|     #include /config/nginx/authentik-server.conf; | ||||
|  | ||||
|     location / { | ||||
|         # enable for basic auth | ||||
|         #auth_basic "Restricted"; | ||||
| @@ -40,6 +43,9 @@ server { | ||||
|         # enable for Authelia (requires authelia-server.conf in the server block) | ||||
|         #include /config/nginx/authelia-location.conf; | ||||
|  | ||||
|         # enable for Authentik (requires authentik-server.conf in the server block) | ||||
|         #include /config/nginx/authentik-location.conf; | ||||
|  | ||||
|         try_files $uri $uri/ /index.html /index.php$is_args$args =404; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -14,6 +14,14 @@ if [[ ! -f /config/nginx/authelia-server.conf ]]; then | ||||
|     cp /defaults/nginx/authelia-server.conf.sample /config/nginx/authelia-server.conf | ||||
| fi | ||||
|  | ||||
| # copy authentik config files if they don't exist | ||||
| if [[ ! -f /config/nginx/authentik-location.conf ]]; then | ||||
|     cp /defaults/nginx/authentik-location.conf.sample /config/nginx/authentik-location.conf | ||||
| fi | ||||
| if [[ ! -f /config/nginx/authentik-server.conf ]]; then | ||||
|     cp /defaults/nginx/authentik-server.conf.sample /config/nginx/authentik-server.conf | ||||
| fi | ||||
|  | ||||
| # copy old ldap config file to new location | ||||
| if [[ -f /config/nginx/ldap.conf ]] && [[ ! -f /config/nginx/ldap-server.conf ]]; then | ||||
|     cp /config/nginx/ldap.conf /config/nginx/ldap-server.conf | ||||
|   | ||||
		Reference in New Issue
	
	Block a user