OIDC-uloskirjautumisen ja istunnonhallinnan toteuttaminen: kattava opas
Tutustu syvällisesti OIDC-autentikointiin ja istunnonhallintaan. Opi toteuttamaan OIDC RP-aloitettu, IdP-aloitettu ja back-channel uloskirjautuminen turvallista istunnonhallintaa varten.
Mikä on OIDC-istunnonhallinta
OpenID Connect (OIDC) on yksinkertainen identiteettikerros, joka on rakennettu OAuth 2.0 -protokollan päälle. Se antaa asiakkaille mahdollisuuden varmistaa loppukäyttäjän identiteetti valtuutuksen antavan palvelimen suorittaman autentikoinnin perusteella sekä hankkia perusprofiilitietoja loppukäyttäjästä yhteensopivalla ja REST:mäisellä tavalla.
OIDC on suunniteltu helpoksi käyttää ja toteuttaa, ja se keskittyy yksinkertaisuuteen ja joustavuuteen. Sitä käytetään laajalti kertakirjautumiseen (SSO) ja identiteettivarmennukseen verkkosovelluksissa, mobiilisovelluksissa ja API:ssa.
Autentikointitilan ja istunnonhallinnan ymmärtäminen OIDC:ssa on tärkeää. Tämä artikkeli selittää, miten OIDC-istunnot ja käyttäjän autentikointitila hallitaan vuorovaikutuksessa Identity Providerin (IdP) ja Relying Partyn (RP) tai Service Providerin (SP) välillä.
Tässä artikkelissa on useita keskeisiä termejä.
- Identity Provider (IdP): Palvelu, joka tallentaa ja autentikoi käyttäjäidentiteettejä.
- Service Provider (SP) tai Relaying Party (RP): Verkkosovellus tai palvelu, joka tarjoaa palveluita käyttäjille ja luottaa IdP:n käyttäjäautentikointiin.
- Kirjautumisistunto tai Autentikointi-istunto: Istunto, joka perustetaan, kun käyttäjä kirjautuu sisään IdP:hen.
- Grantti: Keskitetty käyttäjän autentikointi- ja valtuutustiedot, jotka IdP luo ja hallinnoi.
- Kertakirjautuminen (SSO): Istunto- ja käyttäjäautentikointipalvelu, joka sallii käyttäjän käyttää useita sovelluksia yhdellä kirjautumistiedoilla (esim. nimi ja salasana).
Miten OIDC-autentikointivirtaus toimii
Ymmärtääksemme paremmin OIDC-istunnon ja käyttäjän autentikointitilan hallintaa, tarkastellaan lyhyesti OIDC-autentikointivirtausta verkkosovellukselle:
- Käyttäjä käyttää verkkosovellusta (RP).
- RP ohjaa käyttäjän OIDC-palveluntarjoajalle (IdP) autentikointia varten.
- OIDC-palveluntarjoaja tarkistaa käyttäjän kirjautumisistunnon tilan. Jos ei ole olemassa olevaa istuntoa tai istunto on vanhentunut, käyttäjää pyydetään kirjautumaan sisään.
- Käyttäjä on vuorovaikutuksessa kirjautumissivun kanssa tullakseen autentikoiduksi.
- Kirjautumissivu lähettää vuorovaikutustuloksen OIDC-palveluntarjoajalle.
- OIDC-palveluntarjoaja luo uuden kirjautumisistunnon ja autentikointigrantin käyttäjälle.
- OIDC-palveluntarjoaja ohjaa käyttäjän takaisin RP:hen autentikointikoodin kanssa (Authorization Code flow).
- RP vastaanottaa autentikointikoodin ja vaihtaa sen tokeneihin käyttäjätietojen saamiseksi.
Mikä on RP kirjautumisistunnon hallinta
Kirjautumisistunto perustetaan, kun käyttäjä kirjautuu sisään IdP:hen. Tätä istuntoa käytetään seuraamaan käyttäjän autentikointitilaa IdP:ssä. Istunto sisältää tyypillisesti tietoja, kuten käyttäjän identiteetti, autentikointiaika ja istunnon vanhenemisaika. Se luodaan, kun käyttäjä kirjautuu ensimmäisen kerran sisään ja ylläpidetään, kunnes käyttäjä kirjautuu ulos tai istunto vanhenee.
Istuntokeksi asetetaan turvallisesti käyttäjän selaimeen istunnon tilan ylläpitämiseksi. Istuntokeksiä käytetään käyttäjän istunnon tunnistamiseen ja käyttäjän autentikointiin seuraavia autentikointipyyntöjä varten. Tämä keksi asetetaan yleensä HttpOnly
ja Secure
-lipuilla estämään asiakaspuolen pääsy ja varmistamaan turvallinen viestintä.
Yksi istunto yhdelle RP:lle
Kullekin RP:lle, jonka käyttäjä käyttää eri laitteista tai selaimista, perustetaan erillinen käyttäjän kirjautumisistunto. Tämä tarkoittaa, että käyttäjän autentikointitila ylläpidetään erikseen kullekin RP:lle. Jos käyttäjä kirjautuu ulos yhdeltä RP:ltä, hän on edelleen autentikoitu muilla RP:eillä, kunnes istunto vanhenee tai käyttäjä kirjautuu ulos kaikilta RP:eiltä.
Keskitetty istunto useille RP:ille
Tämä keskitetty istunnonhallinta sallii myös IdP:n ylläpitää yhtenäistä autentikointitilaa useille RP:eille niin kauan kuin käyttäjän istunto on aktiivinen ja autentikointipyynnöt tulevat samasta käyttäjäagentista (laite/selaimen). Tämä mekanismi mahdollistaa kertakirjautumisen kyvyt, joissa käyttäjä voi käyttää useita RP:eitä ilman, että hänen tarvitsee kirjautua uudelleen sisään.
Asiakaspinnan autentikointitila
OIDC:ssa asiakassovellus (RP) luottaa IdP:n myöntämiin tokeneihin käyttäjän identiteetin ja autentikointi- tai valtuutustilan varmistamiseksi. Asiakaspinnan "kirjautumisistunto" ylläpidetään IdP:ltä saaduilla tokeneilla.
- ID-token: Lyhytaikainen token, joka sisältää käyttäjätietoja ja jota käytetään autentikoidun käyttäjän identiteetin varmentamiseen.
- Pääsytoken: Token, joka antaa pääsyn suojattuihin resursseihin käyttäjän puolesta. Pääsytokenin käyttöikä voi olla lyhyt- tai pitkäaikainen, riippuen kokoonpanosta. Asiakassovellukset saattavat luottaa pääsytokenin voimassaoloon määrittääkseen käyttäjän autentikointitilan. Jos pääsytoken on vanhentunut tai poistettu, käyttäjä voidaan katsoa kirjautumattomaksi tai autentikoitumattomaksi ja hänen on autentikoiduttava uudelleen.
- Päivitä token: Jos
offline_access
-alue on pyydetty ja myönnetty, asiakassovellus voi saada päivitystokenin. Se tarjoaa tavan pidentää käyttäjän autentikointitilaa ilman, että käyttäjän tarvitsee autentikoitua uudelleen. Asiakassovellus voi käyttää päivitystokenia saadakseen uuden pääsytokenin, kun nykyinen pääsytoken vanhenee. Niin kauan kuin päivitystoken on voimassa, käyttäjän autentikointitila voidaan pitää yllä ilman käyttäjän vuorovaikutusta.
Näiden tokenien yhdistelmä sallii asiakassovelluksen ylläpitää käyttäjän autentikointitilaa ja pääsyn suojattuihin resursseihin käyttäjän puolesta. Asiakassovelluksen on tallennettava nämä tokenit turvallisesti ja hallittava niiden elinkaarta. (Esim. SPA-sovelluksissa tokeneja voidaan tallentaa selaimen paikallisvarastoon tai istuntovarastoon. Verkkosovelluksissa tokeneja voidaan tallentaa palvelinpuolen istuntotietoihin tai kekseihin.)
OIDC-uloskirjautumismekanismit
Kirjautumisprosessissa OIDC:ssa on monia puolia, koska sekä keskitetyt IdP:n hallinnoimat kirjautumisistunnot että hajautetut asiakaspinnan tokenit ovat mukana.
Tokeneiden ja paikallisen istunnon tyhjentäminen asiakaspinnassa
Käyttäjän autentikointitilan poistaminen tai kumoaminen asiakaspuolella on suhteellisen yksinkertaista. Asiakassovellus voi poistaa tallennetut tokenit (ID-token, pääsytoken ja päivitystoken) käyttäjän selaimesta tai muistista. Tämä toiminto mitätöi tehokkaasti käyttäjän autentikointitilan asiakaspuolella.
Verkkosovelluksille, jotka hallitsevat omat käyttäjäkirjautumisistunnot, voidaan tarvita lisätoimenpiteitä. Näihin kuuluu istuntokeksin ja kaiken istuntodatan (kuten IdP:ltä myöntämien tokenien) tyhjentäminen varmistaakseen, että käyttäjä on täysin kirjautunut ulos.
Keskitetyn kirjautumisistunnon tyhjentäminen IdP:ssä
IdP ylläpitää keskitettyä kirjautumisistuntoa kullekin käyttäjälle. Niin kauan kuin tämä istunto on aktiivinen, käyttäjä voidaan automaattisesti uudelleen autentikoida, vaikka asiakaspinnan tokenit on tyhjennetty, mikä sallii uusien tokenien myöntämisen asiakassovellukselle ilman lisävuorovaikutusta IdP:n kanssa.
Jotta käyttäjä kirjautuisi kokonaan ulos IdP:stä, asiakassovellus (RP) voi aloittaa uloskirjautumispyynnön IdP:lle. Sovelluksen (RP) tulisi ohjata käyttäjä IdP:n istunnonlopetuspisteeseen lopettaaakseen kirjautumisistunnon ja tyhjentääkseen istuntokeksit. Tämä varmistaa täydellisen uloskirjautumisen kaikissa sovelluksissa (RP:issä), jotka jakavat saman keskitetyn istunnon. Kun kirjautumisistunto on päättynyt, aina kun IdP vastaanottaa tokenpyynnön miltä tahansa yhdistetyltä RP:ltä, jotka jakavat saman istunnon, IdP kehottaa käyttäjää autentikoitumaan uudelleen.
OIDC-back-channel-uloskirjautuminen
Joissakin tapauksissa, kun käytt äjä kirjautuu ulos yhdestä sovelluksesta (RP), hän saattaa haluta myös automaattisesti kirjautua ulos kaikista muista sovelluksista (RP:eistä) ilman lisäkäyttäjävuorovaikutusta. Tämä voidaan toteuttaa käyttämällä back-channel-uloskirjautuminen -mekanismia.
Kun IdP vastaanottaa uloskirjautumispyynnön RP:ltä, se ei vain tyhjennä kirjautumisistuntoa vaan myös lähettää back-channel-uloskirjautumisilmoituksen kaikille RP:ille, jotka käyttävät samaa istuntoa ja joilla on rekisteröity back-channel-uloskirjautumispäätepiste.
Kun RP:t vastaanottavat back-channel-uloskirjautumisilmoituksen, ne voivat suorittaa tarvittavat toimet tyhjentääkseen käyttäjän istunnon ja tokenit varmistaakseen, että käyttäjä on täysin kirjautunut ulos kaikista sovelluksista.