SAML 2.0 Vieno atsijungimo geriausia praktika po paslaugų teikėjo neveiklumo

SAML 2.0 Vieno atsijungimo geriausia praktika po paslaugų teikėjo neveiklumo
SAML 2.0 Vieno atsijungimo geriausia praktika po paslaugų teikėjo neveiklumo

Kaip suprasti SAML 2.0 vienkartinį atsijungimą pasibaigus seansui

Kadangi SAML 2.0 vienkartinio prisijungimo (SSO) sistemos leidžia vartotojams prisijungti prie įvairių programų naudojant vieną kredencialų rinkinį, jos labai supaprastino vartotojo autentifikavimą. Tačiau taip pat yra didelių problemų, susijusių su vieno išregistravimo (SLO) sąvoka, ypač dėl to, kas nutinka, kai paslaugų teikėjo (SP) naudotojo seansas baigiasi, nes jis neprisijungė. Tokiu atveju tapatybės teikėjas (IDP) sesija taip pat baigiasi?

Seansų valdymas tarp SP ir IDP yra būtinas norint užtikrinti saugią ir veiksmingą prieigą SAML 2.0 kontekste. Ne visada akivaizdu, kada SP seansas baigiasi, jei vartotojas vis tiek turėtų būti prisijungęs prie IDP, o tai gali turėti įtakos kitoms programoms, susietoms su tuo pačiu IDP. Tai kelia klausimų dėl naudojimo ir saugumo.

Daugelis įmonių, ypač tų, kurios naudoja tokias sąsajas kaip „Microsoft Entra“, turi sukurti aiškią geriausią praktiką, kaip valdyti šiuos seanso skirtąjį laiką. Ar geriau SP seansui sustoti tiesiog SP lygiu, ar taip pat turėtų atsirasti SLO, kuris išregistruoja vartotoją iš IDP paskyros?

Naudojant realaus pasaulio pavyzdžius, siekiant iliustruoti efektyviausius seanso skirtojo laiko apdorojimo būdus ir užtikrinti saugumą bei patogumą, šiame straipsnyje nagrinėjama standartinė praktika ir standartai, kaip tvarkyti SAML 2.0 SLO įvykius tokiose situacijose.

komandą Naudojimo pavyzdys
session() Naudojamas „Express“ programoje vartotojų seansams valdyti. Pavyzdyje jis padeda stebėti vartotojo veiklą ir seanso skirtąjį laiką, kad prireikus būtų galima suaktyvinti atsijungimo logiką.
maxAge Nurodo laikotarpį, per kurį galioja seanso slapukas. Šiuo atveju laikmatis nustatytas taip, kad baigtųsi po 600 000 milisekundžių arba 10 minučių ir inicijuotų atsijungimo įvykį.
create_logout_request_url() Kai paslaugų teikėjo sesija baigiasi, vieno atsijungimo (SLO) užklausos URL, sukurtas šiuo SAML2 bibliotekos metodu, persiunčiamas tapatybės teikėjui (IDP).
readFileSync() Sinchroniškai nuskaito raktų failus ir sertifikatus, o tai būtina norint nustatyti SAML2 paslaugų teikėją. Kad paslaugų teikėjas ir tapatybės teikėjas galėtų saugiai bendrauti, šie sertifikatai būtini.
assert_endpoint Nurodo URL, kurį po sėkmingo autentifikavimo tapatybės teikėjas naudos SAML tvirtinimui perduoti. Taip užtikrinamas Paslaugų teikėjo vartotojo autentifikavimo lygis.
window.onload Šis įvykis naudojamas iš naujo nustatyti seanso neveiklumo laikmatį sąsajoje. Ji užtikrina, kad vartotojui pirmą kartą įkeliant programą, laikmatis prasidėtų iš naujo.
onmousemove Norėdami iš naujo nustatyti seanso laikmatį, šis įvykių klausytojas aptinka bet kokį pelės judėjimą. Tai būtina norint stebėti naudotojo elgesį ir išvengti atsitiktinio seanso skirtojo laiko.
fetch() Naudojamas asinchroniškai siųsti SLO užklausą, pasibaigus seanso skirtajam laikui, į serverį. Norint prisijungti prie tapatybės teikėjo ir atjungti vartotoją nuo IDP, jis nustato užpakalinės programos logiką.
setTimeout() Dėl šios funkcijos sąsajos kode seanso skirtojo laiko įvykis įvyksta po iš anksto nustatyto neveiklumo. Tai būtina norint stebėti vartotojų elgesį ir įgyvendinti saugos taisykles.

Vieno atsijungimo optimizavimas naudojant SAML 2.0 seanso skirtojo laiko tvarkymą

Naudojant Node.js ir Express, užpakalinis scenarijus, skirtas Single Out (SLO) tvarkyti, sutelkia dėmesį į galimybę sekti vartotojo seanso pabaigą ir inicijuoti atsijungimo seką paslaugų teikėjo (SP) ir tapatybės teikėjo (IDP) lygiais. „Express“ seansų valdymas yra šio samprotavimo pagrindas. Suaktyvinimo tašką nustatome nustatydami seanso pabaigą po iš anksto nustatyto neveiklumo – mūsų pavyzdyje – dešimties minučių. Kai sesija baigiasi, scenarijus naudoja metodą `create_logout_request_url()}, kad paleistų SAML 2.0 atsijungimo užklausą, kuri vėliau prisijungia prie IDP (šiuo atveju, Microsoft Entra), kad visiškai užbaigtumėte vartotojo seansą. Tai padidina saugumą, nes garantuoja, kad vartotojas visiškai atsijungė nuo sistemos.

Krauname SAML sertifikatai ir raktus į programą naudodami komandą `readFileSync()}, kad būtų užtikrintas saugus ryšys tarp SP (MyApp) ir IDP (Microsoft Entra). Autentifikuodami atsijungimo užklausą, šie sertifikatai apsaugo nuo neteisėtų atsijungimų ir garantuoja, kad ryšys išliks užšifruotas ir patvirtintas. Vartotojas siunčiamas į atsijungimo užklausos URL po to, kai jis buvo sugeneruotas, kur IDP tvarko atsijungimą ir, jei reikia, baigia vartotojo seansą visose susijusiose programose. Norint išlaikyti kelių programų vienkartinio prisijungimo (SSO) įrenginių saugumą ir vientisumą, reikalingas šis dvipusis ryšys.

„JavaScript“ scenarijus yra būtinas norint stebėti vartotojo veiklą realiuoju laiku priekinėje dalyje. Kiekvieną kartą, kai vartotojas sąveikauja su programa, iš naujo nustatome seanso skirtąjį laiką naudodami įvykių klausytojus, pvz., „onmousemove}“ ir „onkeypress“. Laikmatis, nustatytas naudojant „setTimeout()“, įspėja vartotoją ir automatiškai išregistruoja jį iš SP (MyApp), kai vartotojas neveikia. Atsijungus, anksčiau aprašytas SAML 2.0 atsijungimo procesas paleidžiamas priekinės programos scenarijui, siunčiant SLO užklausą atgalinei sistemai naudojant „fetch()“. Ši technika užtikrina, kad neveiklumas SP lygiu būtų sprendžiamas greitai, saugiai ir be klaidų.

Kai SAML 2.0 integracija ir seanso valdymas yra derinami, naudotojo patirtis yra vientisa ir laikomasi saugumo standartų. Kad vartotojas neliktų autentifikuoto ilgiau nei leidžiama neveiklumo metu, seanso skirtasis laikas inicijuoja ir vietinį SP, ir IDP atsijungimą. Nors SAML 2.0 nereikalauja jokio ypatingo elgesio, susijusio su seanso skirtuoju laiku, paprastai priimta kaip geriausia praktika naudoti seanso galiojimo terminą norint inicijuoti SLO. Pabaigus neaktyvias sesijas, ji sukuria pusiausvyrą tarp saugumo ir vartotojo patirties, nes įgalina sinchronizuotą atsijungimą įvairiose su SSO prijungtose platformose.

Node.js ir Express naudojimas SAML 2.0 vienkartiniam atsijungimui su seanso skirtuoju laiku tvarkyti

Backend metodas, skirtas SAML 2.0 SLO valdyti su paslaugų teikėjo seanso skirtuoju laiku naudojant Node.js ir Express. Šis sprendimas naudoja SAML užklausas, kad patikrintų, ar seansas nepasibaigė, ir inicijuoja SLO tapatybės teikėjo lygiu.

// 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“ sąsajos ir neveikimo laiko aptikimo naudojimas SAML 2.0 SLO tvarkymui

Naudojant sąsajos metodą seanso skirtasis laikas aptinkamas naudojant vanilinį JavaScript, kad būtų galima stebėti naudotojo neveiklumą ir inicijuoti vienkartinį atsijungimą (SLO). Tai nurodo Paslaugų teikėjui pateikti SLO užklausą tapatybės teikėjui.

// 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 tyrinėjimas: Vieno atsijungimo ir neveiklumo skirtasis laikas

Kaip adresai SAML 2.0 Single Out (SLO). neveiklumas Paslaugų teikėjo (SP) lygiu yra labai svarbus valdymo komponentas. Nors akivaizdu, kad neautomatinis atsijungimas iš SP taip pat turėtų sukelti tapatybės teikėjo (IDP) atsijungimą, dėl neveiklumo atsiradęs seanso laikas apsunkina reikalus. SAML 2.0 standartas aiškiai nenurodo, kaip SLO turėtų būti tvarkomas pasibaigus seansui. Tačiau tai leidžia pritaikyti geriausią praktiką, kuri gali pagerinti vartotojo patirtį ir saugumą.

Pavyzdžiui, net ir išjungę SP dėl neveiklumo, vartotojai, kurie prisijungia prie programos, pvz., „MyApp“ per „Microsoft Entra“ (IDP), dažnai lieka prisijungę prie IDP. Jei naudotojas mano, kad yra visiškai atsijungęs, o kitos tą patį SSO naudojančios programos vis dar veikia, tai gali padidėti saugumo rūpesčius. Vienas iš būdų sumažinti šią riziką yra SAML seanso valdymo nustatymas, siekiant imituoti SP skirtojo laiko įvykį IDP lygiu ir užtikrinti sinchronizuotus atsijungimus.

Kitas veiksnys yra priekinio kodo neaktyvios aptikimo metodų įgyvendinimas. Kūrėjai gali numatyti neveiklumo laiką ir įspėti vartotojus prieš pasibaigiant seansui, naudodamiesi įvykių klausytojais naudotojo veiklai. Naudodami tai vartotojai gali kontroliuoti savo seansus ir užtikrinti, kad jų SSO sesija neveikia nuolat. SSO integruotoje aplinkoje kūrėjai gali išsaugoti saugumą ir naudotojo patogumą, subalansuodami šiuos veiksnius.

Dažni klausimai apie SAML 2.0 SLO ir seanso skirtąjį laiką

  1. Kas nutinka paslaugų teikėjo lygiu, kai baigiasi seanso laikas?
  2. Paprastai vartotojas atsijungiamas nuo programos, kai baigiasi seanso laikas SP lygmeniu. Tai priklauso nuo to, kaip sistema nustatyta, nes SAML 2.0 specifikacija nereikalauja, kad tai sukeltų SLO IDP.
  3. Ar identifikacijos teikėjo SLO turėtų suaktyvinti paslaugų teikėjo seanso skirtąjį laiką?
  4. Tai reglamentuoja organizacijos politika. Nors SAML 2.0 to neįpareigoja, daugelis nusprendžia nustatyti SLO IDP, kai SP sesija baigiasi saugumo sumetimais.
  5. Kai neaktyvi sesija baigiasi, kaip galiu padaryti SLO?
  6. Seanso galiojimo pabaiga gali būti aptikta naudojant backend mechanizmą, kuris tada inicijuoja a create_logout_request_url() SLO užklausos IDP pateikimo procedūra.
  7. Kaip priekinėje dalyje aptinkamas seanso neveiklumas?
  8. Renginio klausytojams patinka as onmousemove ir onkeypress dažniausiai naudojami neaktyvumui stebėti, nes jie iš naujo nustato laikmatį kiekvieną kartą, kai vartotojas sąveikauja su programa.
  9. Ar saugu atidaryti IDP seansą atsijungus nuo SP?
  10. Saugumo rizika gali kilti paliekant atvirą IDP seansą, ypač jei vartotojas mano, kad jis visiškai išsiregistravo. Patartina nustatyti SLO, kad atkartotų SP sesijos galiojimo laiką.

Baigiamas SAML 2.0 seanso skirtojo laiko valdymas

Norint išlaikyti SSO sistemos saugumą, reikia įsitikinti, kad tapatybės teikėjas ir paslaugų teikėjas sinchronizuoja savo atsijungimo procesus. Nors SAML 2.0 neįpareigoja tvarkyti seanso skirtojo laiko, daugelis įmonių vienodai tvarko atskirus atsijungimus.

Siekiant pagerinti saugumą, patariama siųsti SLO užklausą kiekvieną kartą, kai Paslaugų teikėjo sesija baigiasi dėl neveiklumo. Taip užtikrinama, kad vartotojas atsijungė nuo tapatybės teikėjo ir programos, išvengiant nepageidaujamos prieigos daugelyje platformų.

SAML 2.0 geriausios praktikos nuorodos ir šaltiniai
  1. Išsamią dokumentaciją apie SAML 2.0 ir vieno atsijungimo standartus bei gaires galite rasti oficialiame puslapyje OASIS SAML 2.0 pagrindinė specifikacija .
  2. Norėdami sužinoti apie „Microsoft Entra“ ir jos integravimą su SSO ir SLO, žr. oficialią „Microsoft“ dokumentaciją apie Azure Active Directory ir SAML .
  3. Pavyzdžiuose naudojamą Node.js SAML biblioteką kartu su seansų valdymo metodais galima toliau tyrinėti SAML2-js bibliotekos dokumentacija .
  4. Norėdami suprasti geriausią praktiką konfigūruojant vienkartinį prisijungimą ir seansų valdymą, žr. straipsnį apie SSO geriausia praktika autorius0.