SLO Issues

Lukijan on ensimmäisenä ymmärrettävä, että Haka on kertakirjautumispalvelu ja kaikessa kertakirjautumisessa on kertauloskirjautumiseen liittyviä haasteita. Nämä on soveltuvimmin kuvattu englanninkielellä Shibbolethin wikissä: https://wiki.shibboleth.net/confluence/x/d4BC . Jatka eteenpäin vasta kun olet sisäistänyt edellisessä linkissä kuvatut asiat. 

 

Shibboleth-konsortio julkaisi keskiviikkona 18.11.2015 Shibboleth IdP -ohjelmistosta version 3.2. Tässä versiossa on mm. parannettu SAML Single Logout tukea. Uusi versio tukee selaimessa tehtävää SAML-määritysten mukaista kertauloskirjautumista (Single Logout Profile). Uloskirjautuminen välitetään palvelujen (SP) ja tunnistuslähteiden (IdP) välillä käyttäjän selaimessa lähettämällä LogoutRequest -viestejä samaan tapaan, kuin kertakirjautumisprofiilissa (Web Browser SSO Profile) lähtetään autentikaatiopyyntöjä ja autentikaatiovastauksia.

Logout Hakassa

Hakassa käytettävä Suomen julkishallinnon SAML-profiili määrittää myös Hakassa käytettävän kertauloskirjautumisen (Single Logout, SLO). Profiilin mukaisesti uloskirjautumisviestien välittämisessä käytetään HTTP-Redirect -päätepisteitä (endpoint). Päätepisteiden osoitteet julkistetaan Haka-metadatassa. SLO-endpointin ilmoittaminen asettaa palvelulle tai tunnistuslähteelle lisävelvollisuuksia. Jos SLO-tuen ilmoittaa, on kertauloskirjautumista tuettava.

Uloskirjautumistuesta ilmoittavan SP:n on:

  • pystyttävä käynnistämään kertauloskirjautumisprosessi
  • pystyttävä lähettämään uloskirjautumispyyntö IdP:lle
  • osattava käsitellä IdP:iden lähettämiä uloskirjautumispyyntöjä
  • varmistettava, että käyttäjän sessio vanhenee myös sovelluksessa

Uloskirjautumistuesta ilmoittavan IdP:n on:

  • tarjottava käyttäjälle tieto uloskirjautumisen onnistumisesta
  • epäonnistuneen uloskirjautumistapahtuman yhteydessä on annettava käyttäjälle selkeä tieto tapahtuneesta ja toimintaohje, miten uloskirjautumisprosessin voi saattaa loppuun

Asiaa ei suoraan ilmaista, mutta IdP:n tapauksessa on pystyttävä kertomaan käyttäjälle uloskirjautumisen onnistuminen tai epäonnistuminen kaikissa niissä palveluissa, joihin IdP on luovuttanut kuluvan session aikana onnistuneen autentikaatiovastauksen.

Aiemmin Haka-operoinnin suositus oli, että SAML-palvelut (SP, IdP) eivät ilmoittaisi tukea kertauloskirjautumiselle, jos ei olla täysin varmoja käytettävän SAML-tuotteen tuesta uloskirjautumiselle. Shibboleth SP-ohjelmisto osasi jo aiemmin käsitellä uloskirjautumispyyntöjä, mutta IdP:n tuki pyyntöjen käsittelylle oli osittaista. Viimeisimmän päivityksen myötä Shibboleth SP- ja IdP-pari pystyy käsittelemään uloskirjautumisen määritysten mukaan. Jos tuki on toteutettu sovellukseen asti, ylläpitäjät voivat rohkeammin luottaa uloskirjautumiseen.

Sekä IdP- että SP-logout toiminnallisuutta voi testata Hakan testipalvelimien kanssa.

Vanha Haka-logout poistuu käytöstä

Hakassa on aiemmin määritelty osittaisen uloskirjautumisen toteuttava Haka-logout. Tässä toteutuksessa IdP välitti kirjautumisen yhteydessä attribuuttina URL:n, jota kutsumalla sessio purettiin IdP:stä. Haka-logout ei missään nimessä ollut kertauloskirjautumista. Jos käyttäjällä oli Haka-kirjautumisen perusteella istuntoja useammalla SP:llä Haka-logoutissa sessio vanhentui IdP:n lisäksi vain siinä SP:ssä, jolta uloskirjautuminen käynnistettiin. Haka-logoutin toteuttaminen ei ollut koskaan pakollista, joten palvelut eivät voineet olla varmoja, että uloskirjautuminen onnistuisi samalla tavalla kaikille IdP-palvelimille.

Haka-logoutin käyttöä ei ole viimeaikoina enää suositeltu. Haka-operoinnin suositus on, että Haka-logoutia ei pidä enää käyttää. Jos uloskirjautumista halutaan tarjota, on käytettävä SAML-määritysten mukaista kertauloskirjautumista.

Palvelujen (SP) ei pidä luottaa, että IdP:ltä olisi saatavilla attribuuttina Haka-logout URL. Tähänkään asti SP ei voinut olettaa, että URL olisi saatavilla kaikilta IdP:iltä. Siinä suhteessa uusi käytäntö ei ole suuri muutos SP:n määrittelyssä. SP:n on valmistauduttava osittaiseen uloskirjautumiseen, toteutettava viimekädessä paikallinen uloskirjautuminen ja ohjeistettava käyttäjää.

Logout käyttöön Shibboleth IdP:ssä

Shibboleth v3.2 IdP:ssä (tai uudemmissa) on tehtävä muutamia konfiguraatiomuutoksia, että logout toimii. idp.properties -tiedostossa on määriteltävä:

idp.properties
# Set to "shibboleth.StorageService" for server-side storage of user sessions
idp.session.StorageService = shibboleth.StorageService
 
# Myos muut IdP:n hallussa olevaan tallennuspaikkaan perustuvat
# maaritykset voivat toimia. Olennaista on, etta tieto on IdP:lla
# Logout ei todennakoisesti toimi, jos sessiotieto tallennetaan
# kayttajan selaimeen cookiella. Katso muut vaihtoehdot:
# https://wiki.shibboleth.net/confluence/x/lYEgAQ
 
# Track information about SPs logged into
idp.session.trackSPSessions = true

IdP:n metadataan on lisättävä logout URL, jonka tyyppi on HTTP-Redirect . URL muodostuu seuraavasti: https://idp.domain.tldn/idp/profile/SAML2/Redirect/SLO .

On suositeltavaa, että IdP:n logout-sivu muokataan organisaation ulkoasun mukaiseksi. Logout-sivun velocity template sijaitsee: %{idp.home}/views/logout.vm .

Shibboleth-wikin ohjeet SLO:n konfuguroimisesta: https://wiki.shibboleth.net/confluence/display/IDP30/Logout+and+SLO

Logout käyttöön Shibboleth SP:ssä

Shibboleth SP:ssä (tätä kirjoittaessa viimeisin vakaa versio V2.5.5) on varmistettava konfiguraatiosta, että logout toimii. shibboleth2.xml -tiedostossa on määriteltävä:

shibboleth2.xml
<Logout>SAML2 Local</Logout>
 
# Olennaista on, että paikallisen (Local) lisäksi on tuettuna SAML2

SP:n metadataan on lisättävä logout URL, jonka tyyppi on HTTP-Redirect. URL muodostuu seuraavasti: https://sp.domain.tldn/Shibboleth.sso/SLO/Redirect . Palvelun kehittäjän on varmistuttava, että varsinaiseen sovellukseen toteutetaan tuki uloskirjautumiselle niin, että sessio vanhenee myös sovelluksessa.

Varaudu kertauloskirjautumisen epäonnistumiseen

Jatkossakin on palveluja (SP, IdP), jotka eivät tue kertauloskirjautumista. IdP:n näkökulmasta kertauloskirjautuminen epäonnistuu, jos sen toteuttaman autentikaation perusteella on muodostettu sessio yhdellekään sellaiselle SP:lle, joka ei tue kertauloskirjautumista. Tällaisessa tapauksessa IdP:n on tiedotettava käyttäjää, että kaikkia sessioita ei saatu vanhennettua ja ohjeistettava, miten käyttäjän on toimittava. Perinteinen Hakan suositus kaikkien selainikkunoiden sulkemisesta pätee edelleen.

Luonnollisesti palvelujen on noudatettava kaikkia soveltuvia varokeinoja käyttäjien yksityisyyden suojaamiseksi. Seuraavassa eräs lista, joka ei suinkaan ole täydellinen tai tyhjentävä:

  • pysyviin kekseihin perustuvat pitkäaikaiset istunnot ei ole sallittuja (persistent cookie forbidden)
    • keksin (cookie) on poistuttava selaimen muistista, kun selain suljetaan
  • sovelluksen tietoturvatasoon soveltuvat istunnon
    • maksimipituus (max lifetime)
    • joutilaisuusaikajakso (inactivity period)
  • Evästeissä HttpOnly -lippu
  • Evästeissä Secure -lippu
  • Sovelluksen HTTP-liikenteen suojaaminen (HTTPS)
  • No labels