-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Infinte Redirect Loop For SSO Login When Behind A Reverse Proxy #10492
Description
Description
When SSO is enabled, the public_baseurl is set to an https scheme endpoint, and the site is running
behind a reverse proxy that terminates ssl and forwards all traffic as http the SSO login redirect will
infinitely loop because the request is for an http endpoint but the public_baseurl is pointed at an
https endpoint. The root of the issue is the simple startswith bytes check inside the SSO redirect
that is meant to make sure that cookies are set on the right domain (#9436).
The public_baseurl mentions that it should be set to the same scheme as what is behind the reverse proxy
however that results in clients like element web being unable to resolve resources behind the reverse proxy
as they aren't always obeying 301 and 302 redirects for resources and exposing the http endpoint externally is
undesirable.
Workaround
The current work around used on my homeserver (matrix.nulloctet.com) is to point the reverse proxy at the https
backend for synapse and leave the public_baseurl as https://matrix.nulloctet.com/. This results in no loop because
the web request is on the same scheme as the public_baseurl. However I am not a fan of terminating an TLS connection only to remote proxy another TLS connection behind the scene. I also do not want to run synapse
completely public as that would be a regression in functionality and would be a special snowflake among the other
services I run.
Proposed Solution
The check of the request and the public_baseurl should completely ignore the scheme, as only the dns name
is required to match for cookies to be correctly set.
Steps to reproduce
- Set public_baseurl to use
httpsscheme - Setup; reverse proxy that forwards all https traffic to the http endpoint of synapse
- Enable an SSO provider
- Attempt to login with that provider
Version information
- Homeserver: matrix.nulloctet.com
If not matrix.org:
Versions Tested:
-
Version: 1.38.1
-
Version: 1.37.1
-
Version: 1.35.0
-
Install method: Docker-Compose
- Platform: Ubuntu Linux 20.04 HWE with Docker CE