diff options
author | BBBSnowball <bbbsnowball@gmail.com> | 2020-10-01 19:54:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-01 13:54:35 -0400 |
commit | 05ee048f2c9ce0bb8a7d2430b21ca3682ef5858b (patch) | |
tree | 87485cf6c0e87b270db93ff00e6eeda9c2b3236c /synapse/handlers | |
parent | Merge tag 'v1.21.0rc1' into develop (diff) | |
download | synapse-05ee048f2c9ce0bb8a7d2430b21ca3682ef5858b.tar.xz |
Add config option for always using "userinfo endpoint" for OIDC (#7658)
This allows for connecting to certain IdPs, e.g. GitLab.
Diffstat (limited to 'synapse/handlers')
-rw-r--r-- | synapse/handlers/oidc_handler.py | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/synapse/handlers/oidc_handler.py b/synapse/handlers/oidc_handler.py index 19cd652675..05ac86e697 100644 --- a/synapse/handlers/oidc_handler.py +++ b/synapse/handlers/oidc_handler.py @@ -96,6 +96,7 @@ class OidcHandler: self.hs = hs self._callback_url = hs.config.oidc_callback_url # type: str self._scopes = hs.config.oidc_scopes # type: List[str] + self._user_profile_method = hs.config.oidc_user_profile_method # type: str self._client_auth = ClientAuth( hs.config.oidc_client_id, hs.config.oidc_client_secret, @@ -196,11 +197,11 @@ class OidcHandler: % (m["response_types_supported"],) ) - # If the openid scope was not requested, we need a userinfo endpoint to fetch user infos + # Ensure there's a userinfo endpoint to fetch from if it is required. if self._uses_userinfo: if m.get("userinfo_endpoint") is None: raise ValueError( - 'provider has no "userinfo_endpoint", even though it is required because the "openid" scope is not requested' + 'provider has no "userinfo_endpoint", even though it is required' ) else: # If we're not using userinfo, we need a valid jwks to validate the ID token @@ -220,8 +221,10 @@ class OidcHandler: ``access_token`` with the ``userinfo_endpoint``. """ - # Maybe that should be user-configurable and not inferred? - return "openid" not in self._scopes + return ( + "openid" not in self._scopes + or self._user_profile_method == "userinfo_endpoint" + ) async def load_metadata(self) -> OpenIDProviderMetadata: """Load and validate the provider metadata. |