SAML 2.0 ühekordse väljalogimise mõistmine pärast seansi ajalõppu
Kuna SAML 2.0 ühekordse sisselogimise (SSO) süsteemid võimaldavad kasutajatel ühte mandaatide komplekti kasutades erinevatesse rakendustesse sisse logida, on need kasutaja autentimist oluliselt lihtsustanud. Kuid ühekordse väljalogimise (SLO) mõistega on ka olulisi probleeme, eriti seoses sellega, mis juhtub siis, kui kasutaja seanss teenusepakkuja (SP) juures aegub, kuna ta pole sisse loginud. Kas sellisel juhul peaks identiteedipakkuja (IDP) seanss ka lõppeb?
Seansihaldus SP ja IDP vahel on SAML 2.0 kontekstis turvalise ja tõhusa juurdepääsu tagamiseks hädavajalik. Kui kasutaja peaks endiselt olema ühendatud IDP-ga, ei ole alati ilmne, millal SP-seanss lõpeb, mis võib mõjutada teisi sama IDP-ga lingitud rakendusi. See tekitab küsimusi nii kasutatavuse kui ka turvalisuse kohta.
Paljud ettevõtted, eriti need, kes kasutavad selliseid liideseid nagu Microsoft Entra, peavad kehtestama selge parima tava nende seansside ajalõppude käsitlemiseks. Kas on parem, kui SP seanss peatub lihtsalt SP tasemel või peaks selle tulemuseks olema ka SLO, mis logib kasutaja IDP kontolt välja?
Kasutades reaalseid näiteid, et illustreerida kõige tõhusamaid tehnikaid seansi ajalõppude käsitlemiseks ja nii turvalisuse kui ka kasutatavuse tagamiseks, uuritakse selles artiklis SAML 2.0 SLO sündmuste käsitlemise standardseid tavasid ja standardeid sellistes olukordades.
Käsk | Kasutusnäide |
---|---|
session() | Kasutatakse Expressi rakenduses kasutajaseansside juhtimiseks. Näites aitab see jälgida kasutaja tegevust ja seansi ajalõpusid, et vajadusel saaks käivitada väljalogimisloogika. |
maxAge | Määrab ajavahemiku, mille jooksul seansiküpsis kehtib. Sel juhul on taimer seatud aeguma 600 000 millisekundi ehk 10 minuti pärast ja käivitama väljalogimissündmuse. |
create_logout_request_url() | Kui teenusepakkuja seanss lõpeb, edastatakse selle SAML2 teegi meetodiga loodud ühekordse väljalogimise (SLO) päringu URL identiteedipakkujale (IDP). |
readFileSync() | Loeb võtmefaile ja sertifikaate sünkroonselt, mis on vajalik SAML2 teenusepakkuja seadistamiseks. Teenusepakkuja ja identiteedipakkuja turvaliseks suhtlemiseks on need sertifikaadid vajalikud. |
assert_endpoint | Näitab URL-i, mida identiteedipakkuja pärast edukat autentimist SAML-i kinnituse edastamiseks kasutab. Seda tehes on tagatud teenusepakkuja kasutaja autentimise tase. |
window.onload | Seda sündmust kasutatakse seansi passiivsuse taimeri lähtestamiseks kasutajaliideses. See tagab, et kui kasutaja laadib programmi esimest korda, käivitub taimer otsast peale. |
onmousemove | Seansitaimeri lähtestamiseks tuvastab see sündmustekuulaja igasuguse hiire liikumise. See on oluline kasutaja käitumisel silma peal hoidmiseks ja juhuslike seansi ajalõppude ärahoidmiseks. |
fetch() | Kasutatakse SLO päringu asünkroonseks saatmiseks serverisse pärast seansi ajalõppu. Identiteedipakkujaga ühenduse loomiseks ja kasutaja IDP-st väljalogimiseks käivitab see taustaloogika. |
setTimeout() | See funktsioon kasutajaliidese koodis põhjustab seansi ajalõpu sündmuse toimumise pärast etteantud passiivsuse määra. See on oluline kasutaja käitumisel silma peal hoidmiseks ja turvaeeskirjade rakendamiseks. |
Ühekordse väljalogimise optimeerimine SAML 2.0 seansi ajalõpu haldamise abil
Kasutades Node.js ja Express, ühekordse väljalogimise (SLO) haldamise taustaskript keskendub võimalusele jälgida kasutaja seansi aegumist ja algatada teenusepakkuja (SP) ja identiteedipakkuja (IDP) tasemel väljalogimisjärjestus. Selle mõttekäigu keskmes on Expressi seansside haldamine. Määrame käivituspunkti, määrates seansi lõppema pärast ettemääratud tegevusetust – meie näites kümme minutit. Seansi lõppedes kasutab skript SAML 2.0 väljalogimistaotluse käivitamiseks meetodit `create_logout_request_url()}, mis seejärel loob ühenduse IDP-ga (antud juhul Microsoft Entra), et kasutaja seanss täielikult lõpetada. See suurendab turvalisust, tagades, et kasutaja on süsteemist täielikult välja loginud.
Me laadime SAML sertifikaadid ja võtmed rakendusse, kasutades käsku `readFileSync()}, et võimaldada turvalist sidet SP (MyApp) ja IDP (Microsoft Entra) vahel. Väljalogimistaotluse autentimisega kaitsevad need sertifikaadid ebaseaduslike väljalogimiste eest ja tagavad, et side jääb krüpteerituks ja kinnitatud. Kasutaja saadetakse pärast selle loomist väljalogimistaotluse URL-ile, kus IDP tegeleb väljalogimisega ja vajadusel lõpetab kasutaja seansi kõigis seotud rakendustes. Mitme rakendusega ühekordse sisselogimise (SSO) installide turvalisuse ja terviklikkuse säilitamine nõuab seda kahepoolset suhtlust.
JavaScripti skript on oluline kasutajate tegevuste reaalajas jälgimiseks esiotsas. Iga kord, kui kasutaja programmiga suhtleb, lähtestame seansi ajalõpu, kasutades sündmuste kuulajaid, nagu näiteks `onmousemove} ja `onkeypress. Funktsiooniga „setTimeout()” seatud taimer hoiatab kasutajat ja logib ta automaatselt SP-st (MyApp) välja, kui kasutaja jääb jõude. Pärast väljalogimist käivitab eelnevalt hõlmatud SAML 2.0 väljalogimisprotsess eesprogrammi skriptiga, mis saadab taustaprogrammile SLO päringu, kasutades käsku `fetch(). See meetod tagab, et SP tasemel tegevusetus lahendatakse kiiresti, turvaliselt ja tõrgeteta.
Kui SAML 2.0 integratsioon ja seansi juhtimine on kombineeritud, kasutuskogemus on sujuv ja turvastandardeid järgitakse. Selleks, et kasutaja ei jääks passiivsuse ajal autendituks kauemaks kui lubatud, käivitab seansi ajalõpp nii kohaliku teenusepakkujast väljalogimise kui ka IDP väljalogimise. Kuigi SAML 2.0 ei nõua seansi ajalõpudega seoses mingit erilist käitumist, on üldiselt heaks tavaks kasutada SLO algatamiseks seansi aegumist. Lõpetades jõudeolekuseansid, saavutab see tasakaalu turvalisuse ja kasutajakogemuse vahel, võimaldades sünkroonitud väljalogimisi erinevatel SSO-ga ühendatud platvormidel.
Node.js ja Expressi kasutamine SAML 2.0 ühekordse väljalogimise haldamiseks seansi ajalõpuga
Taustameetod SAML 2.0 SLO haldamiseks teenusepakkuja seansi ajalõppudega, kasutades Node.js ja Express. See lahendus kasutab SAML-i päringuid, et kontrollida, kas seanss on aegunud, ja algatada SLO identiteedipakkuja tasemel.
// 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");
});
JavaScripti esiserveri ja jõudeoleku ajalõpu tuvastamise kasutamine SAML 2.0 SLO käsitlemiseks
Esiliidese meetodi puhul tuvastatakse seansi ajalõpp, kasutades vanilje JavaScripti, et jälgida kasutaja passiivsust ja algatada ühekordne väljalogimine (SLO). See käsib teenusepakkujal esitada identiteedipakkujale SLO päring.
// 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 uurimine: ühekordne väljalogimine ja tegevusetuse ajalõpp
Kuidas SAML 2.0 ühekordne väljalogimine (SLO) adresseerib tegevusetus teenusepakkuja (SP) tasemel on haldamiseks kriitiline komponent. Kuigi on ilmne, et SP-s käsitsi väljalogimine peaks põhjustama ka identiteedipakkuja (IDP) väljalogimise, muudavad tegevusetusest tingitud seansi ajalõpud asja keeruliseks. SAML 2.0 standard ei ütle selgelt, kuidas SLO-d tuleks seansi aegumisel käsitleda. See võimaldab aga kasutusele võtta parimaid tavasid, mis võivad parandada kasutajakogemust ja turvalisust.
Näiteks isegi pärast SP-st tegevusetuse tõttu väljalülitamist jäävad kasutajad, kes logivad Microsoft Entra (IDP) kaudu sisse rakendusse (nt MyApp), sageli IDP-sse. Kui kasutaja usub, et on täielikult välja logitud, samal ajal kui teised sama SSO-d kasutavad rakendused veel töötavad, võib see tõsta turvaprobleemid. Üks võimalus selle riski vähendamiseks on SAML-i seansihalduse seadistamine SP ajalõpu sündmuse jäljendamiseks IDP tasemel ja sünkroonitud väljalogimiste tagamiseks.
Teine tegur on esiosa koodi jõudeoleku tuvastamise tehnikate rakendamine. Arendajad saavad ette näha tegevusetuse aegu ja hoiatada kasutajaid enne seansi aegumist, kasutades kasutaja tegevuse jaoks sündmuste kuulajaid. Seda kasutades saavad kasutajad säilitada kontrolli oma seansside üle ja veenduda, et nende SSO seanss ei tööta pidevalt. SSO-ga integreeritud keskkonnas saavad arendajad säilitada turvalisuse ja kasutajamugavuse, luues nende tegurite vahel tasakaalu.
Levinud küsimused SAML 2.0 SLO ja seansi ajalõppude kohta
- Mis juhtub teenusepakkuja tasemel, kui seanss aegub?
- Tavaliselt logitakse kasutaja programmist välja, kui seanss SP tasemel aegub. See sõltub siiski sellest, kuidas süsteem on seadistatud, kuna SAML 2.0 spetsifikatsioon ei nõua, et see põhjustaks IDP-s SLO-d.
- Kas identiteedipakkuja SLO peaks käivitama teenusepakkuja seansi ajalõpu?
- Seda juhib organisatsiooni poliitika. Kuigi SAML 2.0 seda ei nõua, otsustavad paljud turvakaalutlustel SP-seansi lõppedes IDP-s SLO-d sisse lülitada.
- Kui passiivne seanss lõpeb, kuidas ma saan SLO teoks teha?
- Seansi aegumist saab tuvastada taustamehhanismi kaudu, mis seejärel käivitab a create_logout_request_url() IDP-le SLO päringu esitamise kord.
- Kuidas tuvastatakse esipaneelil seansi passiivsus?
- Sündmuste kuulajatele meeldib as onmousemove ja onkeypress kasutatakse tavaliselt passiivsuse jälgimiseks, kuna need lähtestavad taimeri iga kord, kui kasutaja rakendusega suhtleb.
- Kas pärast SP-st väljalogimist on IDP-seansi avamine turvaline?
- IDP-seansi avatuks jätmisel võib tekkida turvarisk, eriti kui kasutaja usub, et on end täielikult välja registreerinud. Soovitatav on seadistada SLO SP-seansi aegumise kordamiseks.
SAML 2.0 seansi ajalõpu haldamise lõpetamine
Turvalisuse säilitamine SSO-süsteemis nõuab, et identiteedipakkuja ja teenusepakkuja sünkrooniksid oma väljalogimisprotsesse. Kuigi SAML 2.0 ei nõua seansi ajalõppude käsitlemist, tegelevad paljud ettevõtted üksikute väljalogimistega ühtsel viisil.
Turvalisuse parandamiseks on soovitatav saata SLO päring iga kord, kui teenusepakkuja seanss lõpeb tegevusetuse tõttu. See tagab, et kasutaja on identiteedipakkujast ja ka rakendusest välja loginud, vältides soovimatut juurdepääsu paljudel platvormidel.
SAML 2.0 parimate tavade viited ja allikad
- Üksikasjaliku dokumentatsiooni SAML 2.0 ja ühekordse väljalogimise standardite ja juhiste kohta leiate ametlikust OASIS SAML 2.0 põhispetsifikatsioon .
- Microsoft Entra ja selle SSO ja SLO-ga integreerimise kohta ülevaate saamiseks vaadake Microsofti ametlikku dokumentatsiooni Azure Active Directory ja SAML .
- Näidetes kasutatud Node.js SAML-i teeki koos seansihaldustehnikatega saab lähemalt uurida SAML2-js teegi dokumentatsioon .
- Ühekordse sisselogimise ja seansihalduse konfigureerimise parimate tavade mõistmiseks vaadake artiklit SSO parimad tavad Autor: Auth0.