X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Fproviders%2Fsaml2idp.py;h=93dcbc6c448828e3ca29104ac286124263a4dbb0;hp=f771ef72c1691edb1ddeb9ab6add56b8532f87e7;hb=07ec779defce9b0fecf4da8c726d1b492c147626;hpb=8445b3297cd0b25989f2575c21bf3426aee7c5ad diff --git a/ipsilon/providers/saml2idp.py b/ipsilon/providers/saml2idp.py index f771ef7..93dcbc6 100644 --- a/ipsilon/providers/saml2idp.py +++ b/ipsilon/providers/saml2idp.py @@ -131,7 +131,7 @@ class Continue(AuthenticateRequest): return self.auth(login) -class RedirectLogout(LogoutRequest): +class Logout(LogoutRequest): def GET(self, *args, **kwargs): query = cherrypy.request.query_string @@ -159,7 +159,7 @@ class SLO(ProviderPageBase): def __init__(self, *args, **kwargs): super(SLO, self).__init__(*args, **kwargs) self.debug('SLO init') - self.Redirect = RedirectLogout(*args, **kwargs) + self.Redirect = Logout(*args, **kwargs) # one week @@ -346,7 +346,6 @@ Provides SAML 2.0 authentication infrastructure. """ return self.get_config_value('default allowed attributes') def get_tree(self, site): - self.idp = self.init_idp() self.page = SAML2(site, self) self.admin = Saml2AdminPage(site, self) self.rest = Saml2RestBase(site, self) @@ -394,13 +393,18 @@ Provides SAML 2.0 authentication infrastructure. """ Logout all SP sessions when the logout comes from the IdP. For the current user only. + + Only use HTTP-Redirect to start the logout. This is guaranteed + to be supported in SAML 2. """ self.debug("IdP-initiated SAML2 logout") us = UserSession() user = us.get_user() saml_sessions = self.sessionfactory - session = saml_sessions.get_next_logout() + # pylint: disable=unused-variable + (mech, session) = saml_sessions.get_next_logout( + logout_mechs=[lasso.SAML2_METADATA_BINDING_REDIRECT]) if session is None: return @@ -418,7 +422,8 @@ Provides SAML 2.0 authentication infrastructure. """ # be redirected to when all SP's are logged out. idpurl = self._root.instance_base_url() session_id = "_" + uuid.uuid4().hex.upper() - saml_sessions.add_session(session_id, idpurl, user.name, "") + saml_sessions.add_session(session_id, idpurl, user.name, "", "", + [lasso.SAML2_METADATA_BINDING_REDIRECT]) init_session = saml_sessions.get_session_by_id(session_id) saml_sessions.start_logout(init_session, relaystate=idpurl)