mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-11-20 00:32:21 -05:00
UI Auth via SSO: redirect the user to an appropriate SSO. (#9081)
If we have integrations with multiple identity providers, when the user does a UI Auth, we need to redirect them to the right one. There are a few steps to this. First of all we actually need to store the userid of the user we are trying to validate in the UIA session, since the /auth/sso/fallback/web request is unauthenticated. Then, once we get the /auth/sso/fallback/web request, we can fish the user id out of the session, and use it to look up the external id mappings, and hence pick an SSO provider for them.
This commit is contained in:
parent
723b19748a
commit
789d9ebad3
7 changed files with 133 additions and 60 deletions
|
|
@ -38,6 +38,7 @@ from synapse.config.ratelimiting import FederationRateLimitConfig
|
|||
from synapse.config.registration import RegistrationConfig
|
||||
from synapse.config.server import is_threepid_reserved
|
||||
from synapse.handlers.auth import AuthHandler
|
||||
from synapse.handlers.ui_auth import UIAuthSessionDataConstants
|
||||
from synapse.http.server import finish_request, respond_with_html
|
||||
from synapse.http.servlet import (
|
||||
RestServlet,
|
||||
|
|
@ -494,11 +495,11 @@ class RegisterRestServlet(RestServlet):
|
|||
# user here. We carry on and go through the auth checks though,
|
||||
# for paranoia.
|
||||
registered_user_id = await self.auth_handler.get_session_data(
|
||||
session_id, "registered_user_id", None
|
||||
session_id, UIAuthSessionDataConstants.REGISTERED_USER_ID, None
|
||||
)
|
||||
# Extract the previously-hashed password from the session.
|
||||
password_hash = await self.auth_handler.get_session_data(
|
||||
session_id, "password_hash", None
|
||||
session_id, UIAuthSessionDataConstants.PASSWORD_HASH, None
|
||||
)
|
||||
|
||||
# Ensure that the username is valid.
|
||||
|
|
@ -528,7 +529,9 @@ class RegisterRestServlet(RestServlet):
|
|||
if not password_hash and password:
|
||||
password_hash = await self.auth_handler.hash(password)
|
||||
await self.auth_handler.set_session_data(
|
||||
e.session_id, "password_hash", password_hash
|
||||
e.session_id,
|
||||
UIAuthSessionDataConstants.PASSWORD_HASH,
|
||||
password_hash,
|
||||
)
|
||||
raise
|
||||
|
||||
|
|
@ -629,7 +632,9 @@ class RegisterRestServlet(RestServlet):
|
|||
# Remember that the user account has been registered (and the user
|
||||
# ID it was registered with, since it might not have been specified).
|
||||
await self.auth_handler.set_session_data(
|
||||
session_id, "registered_user_id", registered_user_id
|
||||
session_id,
|
||||
UIAuthSessionDataConstants.REGISTERED_USER_ID,
|
||||
registered_user_id,
|
||||
)
|
||||
|
||||
registered = True
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue