SAML 2.0 -kertakirjautumisen parhaat käytännöt palveluntarjoajan toimettomuuden jälkeen

SAML

SAML 2.0:n kertakirjautuminen istunnon aikakatkaisun jälkeen

Koska SAML 2.0 Single Sign-On (SSO) -järjestelmät sallivat käyttäjien kirjautua useisiin sovelluksiin yhdellä tunnistesarjalla, ne ovat huomattavasti yksinkertaistaneet käyttäjän todennusta. Mutta SLO (Single Log Out) -käsitteeseen liittyy myös merkittäviä ongelmia, erityisesti mitä tapahtuu, kun käyttäjän istunto umpeutuu palveluntarjoajassa (SP), koska hän ei ole kirjautunut sisään. Tässä tapauksessa identiteetintarjoajan pitäisi (IDP) istunto myös loppuu?

SP:n ja IDP:n välinen istunnonhallinta on välttämätöntä turvallisen ja tehokkaan pääsyn varmistamiseksi SAML 2.0:n yhteydessä. Ei ole aina selvää, milloin SP-istunto päättyy, jos käyttäjän pitäisi edelleen olla yhteydessä IDP:hen, mikä voi vaikuttaa muihin sovelluksiin, jotka on linkitetty samaan IDP:hen. Tämä herättää kysymyksiä käytettävyydestä ja turvallisuudesta.

Monien yritysten, erityisesti Microsoft Entran kaltaisia ​​käyttöliittymiä käyttävien yritysten on luotava selkeä paras käytäntö näiden istuntojen aikakatkaisujen käsittelemiseksi. Onko parempi, että SP:n istunto pysähtyy yksinkertaisesti SP-tasolle, vai pitäisikö sen johtaa myös SLO:han, joka kirjaa käyttäjän ulos IDP-tililtä?

Käytännössä todellisia esimerkkejä havainnollistamaan tehokkaimpia tekniikoita istunnon aikakatkaisujen käsittelemiseksi ja turvallisuuden ja käytettävyyden takaamiseksi. Tässä artikkelissa tarkastellaan vakiokäytäntöjä ja standardeja SAML 2.0 SLO -tapahtumien käsittelemiseksi tällaisissa tilanteissa.

Komento Esimerkki käytöstä
session() Käytetään Express-sovelluksessa käyttäjien istuntojen ohjaamiseen. Esimerkissä se auttaa seuraamaan käyttäjän toimintaa ja istunnon aikakatkaisuja, jotta uloskirjautumislogiikka voidaan laukaista tarvittaessa.
maxAge Määrittää ajanjakson, jolloin istuntoeväste on voimassa. Tässä tapauksessa ajastin on asetettu vanhenemaan 600 000 millisekunnin tai 10 minuutin kuluttua ja käynnistämään uloskirjautumistapahtuman.
create_logout_request_url() Kun palveluntarjoajan istunto päättyy, tällä SAML2-kirjastomenetelmällä luotu SLO (Single Log Out) -pyyntö URL välitetään edelleen identiteetin tarjoajalle (IDP).
readFileSync() Lukee avaintiedostot ja varmenteet synkronisesti, mikä on välttämätöntä SAML2-palveluntarjoajan määrittämiseksi. Nämä sertifikaatit ovat välttämättömiä, jotta palveluntarjoaja ja henkilöllisyyden tarjoaja voivat kommunikoida turvallisesti.
assert_endpoint Osoittaa URL-osoitteen, jota identiteetintarjoaja käyttää onnistuneen todennuksen jälkeen SAML-vahvistuksen lähettämiseen. Näin taataan palveluntarjoajan käyttäjätodennustaso.
window.onload Tätä tapahtumaa käytetään käyttöliittymän istunnon passiivisuusajastimen nollaamiseen. Se varmistaa, että kun käyttäjä lataa ohjelman ensimmäisen kerran, ajastin käynnistyy alusta.
onmousemove Istuntoajastimen nollaamiseksi tämä tapahtuman kuuntelija havaitsee hiiren liikkeet. Se on välttämätöntä käyttäjien käyttäytymisen seuraamiseksi ja istunnon tahattomien aikakatkaisujen välttämiseksi.
fetch() Käytetään asynkronisesti SLO-pyynnön lähettämiseen palvelimelle istunnon aikakatkaisun jälkeen. Yhdistääkseen identiteetin tarjoajaan ja kirjatakseen käyttäjän ulos IDP:stä se käynnistää taustalogiikan.
setTimeout() Tämä käyttöliittymäkoodin toiminto saa aikaan istunnon aikakatkaisutapahtuman ennalta määritetyn määrän käyttämättömyyden jälkeen. Se on välttämätöntä käyttäjien käyttäytymisen seuraamiseksi ja turvallisuusmääräysten toimeenpanon kannalta.

Yhden uloskirjautumisen optimointi SAML 2.0:n istunnon aikakatkaisukäsittelyllä

Käyttämällä ja Express, SLO:n (Single Log Out) käsittelyyn tarkoitettu taustaskripti keskittyy kykyyn seurata käyttäjän istunnon päättymistä ja aloittaa uloskirjautumisjakso palveluntarjoajan (SP) ja identiteetin tarjoajan (IDP) tasolla. Express-istuntojen hallinta on tämän päättelyn ytimessä. Luomme liipaisupisteen asettamalla istunnon päättymään ennalta määritetyn määrän käyttämättömyyden jälkeen – esimerkissämme kymmenen minuuttia. Kun istunto päättyy, komentosarja käyttää `create_logout_request_url()}-menetelmää SAML 2.0 -kirjautumispyynnön käynnistämiseen, joka sitten muodostaa yhteyden IDP:hen (tässä tapauksessa ) lopettaaksesi käyttäjäistunnon kokonaan. Tämä parantaa turvallisuutta takaamalla, että käyttäjä on kirjautunut kokonaan ulos järjestelmästä.

Lataamme ja avaimet sovellukseen `readFileSync()}-komennolla mahdollistaaksesi suojatun viestinnän SP:n (MyApp) ja IDP:n (Microsoft Entra) välillä. Todentamalla uloskirjautumispyynnön nämä varmenteet suojaavat laittomalta uloskirjautumiselta ja takaavat, että viestintä pysyy salattuna ja vahvistettuna. Käyttäjä lähetetään uloskirjautumispyynnön URL-osoitteeseen sen luomisen jälkeen, jossa IDP käsittelee uloskirjautumisen ja tarvittaessa lopettaa käyttäjän istunnon kaikissa siihen liittyvissä sovelluksissa. Monisovellusten Single Sign-On (SSO) -asennusten turvallisuuden ja eheyden ylläpitäminen edellyttää tätä kaksisuuntaista viestintää.

JavaScript-skripti on välttämätön käyttäjien toimintojen reaaliajassa seurantaan käyttöliittymässä. Joka kerta kun käyttäjä on vuorovaikutuksessa ohjelman kanssa, nollaamme istunnon aikakatkaisun käyttämällä tapahtumakuuntelijoita, kuten "onmousemove}" ja "onkeypress". Ajastin, joka on asetettu parametrilla "setTimeout()", varoittaa käyttäjää ja kirjaa hänet automaattisesti ulos SP:stä (MyApp), kun käyttäjä on käyttämättömänä. Uloskirjautumisen jälkeen aiemmin katettu SAML 2.0 -kirjautumisprosessi käynnistyy käyttöliittymän komentosarjalla, joka lähettää SLO-pyynnön taustajärjestelmään käyttämällä "fetch()"-komentoa. Tämä tekniikka varmistaa, että toimimattomuus SP-tasolla korjataan nopeasti, turvallisesti ja virheetön.

Kun SAML 2.0 -integraatio ja on yhdistetty, käyttökokemus on saumaton ja turvallisuusstandardeja noudatetaan. Istunnon aikakatkaisu käynnistää sekä paikallisen SP:n uloskirjautumisen että IDP:n uloskirjautumisen, jotta käyttäjä pysyisi todennettuna kauemmin kuin sallitaan. Vaikka SAML 2.0 ei vaadi mitään erityistä käyttäytymistä istunnon aikakatkaisujen suhteen, on yleisesti hyväksytty parhaana käytäntönä käyttää istunnon vanhenemista SLO:n käynnistämiseen. Lopettamalla käyttämättömät istunnot, se löytää tasapainon turvallisuuden ja käyttökokemuksen välillä sallimalla synkronoidut uloskirjautumiset eri SSO-liitetyillä alustoilla.

Node.js:n ja Expressin käyttäminen SAML 2.0:n kertakirjautumisen käsittelemiseen istunnon aikakatkaisun kanssa

Taustamenetelmä SAML 2.0 SLO:n hallintaan palveluntarjoajan istunnon aikakatkaisuilla käyttämällä Node.js:ää ja Expressiä. Tämä ratkaisu käyttää SAML-pyyntöjä tarkistaakseen, onko istunto vanhentunut, ja käynnistääkseen SLO:n Identity Provider -tasolla.

// Required modules for Node.js and SAML SSO
const express = require('express');
const session = require('express-session');
const saml2 = require('saml2-js');
const app = express();

// Service Provider (SP) setup
const sp = new saml2.ServiceProvider({
  entity_id: "http://myapp.com/metadata.xml",
  private_key: fs.readFileSync("./cert/sp-private-key.pem").toString(),
  certificate: fs.readFileSync("./cert/sp-certificate.pem").toString(),
  assert_endpoint: "http://myapp.com/assert"
});

// Identity Provider (IDP) setup
const idp = new saml2.IdentityProvider({
  sso_login_url: "https://login.microsoftonline.com/sso",
  sso_logout_url: "https://login.microsoftonline.com/logout",
  certificates: fs.readFileSync("./cert/idp-certificate.pem").toString()
});

// Session management
app.use(session({
  secret: 'mySecretKey',
  resave: false,
  saveUninitialized: true,
  cookie: { maxAge: 600000 } // Set session expiration time
}));

// Middleware to handle session timeout and SLO
app.use((req, res, next) => {
  if (req.session.expires && Date.now() > req.session.expires) {
    sp.create_logout_request_url(idp, {}, (err, logout_url) => {
      if (err) return res.status(500).send("Logout error");
      return res.redirect(logout_url); // Trigger SLO
    });
  } else {
    next(); // Continue if session is valid
  }
});

app.listen(3000, () => {
  console.log("Server running on port 3000");
});

JavaScript-käyttöliittymän ja Idle Timeout Detectionin käyttäminen SAML 2.0 SLO:n käsittelemiseen

Käyttöliittymämenetelmässä istunnon aikakatkaisu havaitaan käyttämällä vanilja-JavaScriptia käyttäjän passiivisuuden tarkkailemiseen ja SLO:n (Single Out) käynnistämiseen. Tämä kehottaa palveluntarjoajaa lähettämään SLO-pyynnön identiteetin tarjoajalle.

// Define variables for session timeout
let timeoutDuration = 600000; // 10 minutes
let timeoutTimer;

// Reset the timer on any user interaction
function resetTimer() {
  clearTimeout(timeoutTimer);
  timeoutTimer = setTimeout(triggerLogout, timeoutDuration);
}

// Trigger logout function
function triggerLogout() {
  alert("Session expired due to inactivity.");
  window.location.href = "/logout"; // Redirect to SP logout
}

// Monitor user actions
window.onload = resetTimer;
document.onmousemove = resetTimer;
document.onkeypress = resetTimer;

// SLO event triggered after logout
function sendSLORequest() {
  fetch('/api/slo', { method: 'POST' })
    .then(response => {
      if (response.ok) {
        console.log("SLO request sent to IDP");
      }
    })
    .catch(err => console.error("SLO request failed", err));
}

SAML 2.0:n tutkiminen: kertakirjautuminen ja passiivisuuden aikakatkaisu

Miten SAML 2.0 Single Log Out (SLO) toimii Palveluntarjoajan (SP) tasolla on kriittinen komponentti hallinnassa. Vaikka on selvää, että manuaalinen uloskirjautuminen SP:ssä aiheuttaa myös Identity Provider (IDP) -uloskirjautumisen, passiivisuuden aiheuttamat istunnon aikakatkaisut mutkistavat asioita. SAML 2.0 -standardi ei kerro selkeästi, kuinka SLO:ta tulisi käsitellä istunnon päättyessä. Tämä kuitenkin mahdollistaa parhaiden käytäntöjen omaksumisen, jotka voivat parantaa käyttökokemusta ja turvallisuutta.

Esimerkiksi käyttäjät, jotka kirjautuvat sovellukseen, kuten MyAppiin, Microsoft Entran (IDP) kautta, pysyvät usein kirjautuneena IDP:hen, vaikka heidät suljettiinkin pois SP:stä epäaktiivisuuden vuoksi. Jos käyttäjä uskoo olevansa täysin kirjautunut ulos, kun muut samaa SSO:ta käyttävät sovellukset ovat vielä käynnissä, tämä voi nostaa . SAML-istunnonhallinnan määrittäminen jäljittelemään SP-aikakatkaisutapahtumaa IDP-tasolla ja takaamaan synkronoidut uloskirjautumiset on yksi tapa vähentää tätä riskiä.

Toinen tekijä on käyttöliittymän koodin käyttämättömyyden havaitsemistekniikat. Kehittäjät voivat ennakoida toimettomuusaikoja ja varoittaa käyttäjiä ennen istunnon päättymistä käyttämällä tapahtumaseuraajia käyttäjien toimintaan. Käyttämällä tätä käyttäjät voivat hallita istuntojaan ja varmistaa, että heidän ei toimi jatkuvasti. SSO-integroidussa ympäristössä kehittäjät voivat säilyttää turvallisuuden ja käyttömukavuuden saavuttamalla tasapainon näiden tekijöiden välillä.

  1. Mitä tapahtuu palveluntarjoajan tasolla, kun istunto aikakatkaistaan?
  2. Yleensä käyttäjä kirjataan ulos ohjelmasta, kun istunto aikakatkaistaan ​​SP-tasolla. Se riippuu kuitenkin siitä, miten järjestelmä on määritetty, koska SAML 2.0 -spesifikaatio ei vaadi tämän aiheuttavan SLO:ta IDP:ssä.
  3. Pitäisikö palveluntarjoajan istunnon aikakatkaisun laukaista SLO identiteetintarjoajalle?
  4. Tätä ohjaa organisaation politiikka. Vaikka SAML 2.0 ei velvoita sitä, monet päättävät laskea SLO:n IDP:lle, kun SP-istunto päättyy turvallisuussyistä.
  5. Kun passiivinen istunto päättyy, miten voin saada SLO:n toteutumaan?
  6. Istunnon vanheneminen voidaan havaita taustamekanismin kautta, joka sitten käynnistää a SLO-pyynnön tekeminen IDP:lle.
  7. Miten istunnon passiivisuus havaitaan käyttöliittymässä?
  8. Tapahtuman kuuntelijat pitävät as ja käytetään yleisesti passiivisuuden seuraamiseen, koska ne nollaavat ajastimen aina, kun käyttäjä on vuorovaikutuksessa sovelluksen kanssa.
  9. Onko turvallista pitää IDP-istunto auki SP:stä kirjautumisen jälkeen?
  10. Turvariski voi syntyä IDP-istunnon jättämisestä auki, varsinkin jos käyttäjä uskoo, että hän on kirjautunut ulos kokonaan. On suositeltavaa määrittää SLO toistamaan SP-istunnon vanheneminen.

SSO-järjestelmän turvallisuuden ylläpitäminen edellyttää, että identiteetintarjoaja ja palveluntarjoaja synkronoivat uloskirjautumisprosessinsa. Vaikka SAML 2.0 ei velvoita istuntojen aikakatkaisujen käsittelyä, monet yritykset käsittelevät yksittäisiä uloskirjautumisia yhtenäisellä tavalla.

Turvallisuuden parantamiseksi on suositeltavaa lähettää SLO-pyyntö aina, kun Palveluntarjoajan istunto päättyy epäaktiivisuuden vuoksi. Tämä varmistaa, että käyttäjä on kirjautunut ulos Identity Providerista sekä sovelluksesta, mikä välttää ei-toivotun käytön monilla alustoilla.

  1. Yksityiskohtainen dokumentaatio SAML 2.0:n ja kertakirjautumisen standardeista ja ohjeista löytyy virallisesta julkaisusta OASIS SAML 2.0 -ydinmääritys .
  2. Saat näkemyksiä Microsoft Entrasta ja sen integroinnista SSO:n ja SLO:n kanssa Microsoftin virallisesta dokumentaatiosta Azure Active Directory ja SAML .
  3. Esimerkeissä käytettyyn Node.js SAML-kirjastoon sekä istunnonhallintatekniikoihin voi tutustua tarkemmin osoitteessa SAML2-js-kirjaston dokumentaatio .
  4. Ymmärtääksesi parhaat käytännöt kertakirjautumisen ja istunnonhallinnan määrittämisessä, tutustu artikkeliin SSO parhaat käytännöt tekijältä Auth0.