Izpratne par SAML 2.0 vienreizēju izteikšanos pēc sesijas noildzes
Tā kā SAML 2.0 vienreizējās pierakstīšanās (SSO) sistēmas ļauj lietotājiem pierakstīties dažādās lietojumprogrammās, izmantojot vienu akreditācijas datu kopu, tās ir ievērojami vienkāršojušas lietotāju autentifikāciju. Taču pastāv arī būtiskas problēmas saistībā ar vienotas atteikšanās (SLO) jēdzienu, jo īpaši saistībā ar to, kas notiek, kad pakalpojuma sniedzēja (SP) lietotāja sesija beidzas, jo viņš nav pieteicies. Šādā gadījumā identitātes nodrošinātājam vajadzētu (IDP) sesija arī beigsies?
Sesiju pārvaldība starp SP un IDP ir būtiska, lai nodrošinātu drošu un efektīvu piekļuvi SAML 2.0 kontekstā. Ne vienmēr ir skaidrs, kad SP sesija beidzas, ja lietotājam joprojām ir jābūt savienotam ar IDP, kas var ietekmēt citas lietotnes, kas ir saistītas ar to pašu IDP. Tas rada jautājumus par lietojamību, kā arī par drošību.
Daudziem uzņēmumiem, īpaši tiem, kas izmanto saskarnes, piemēram, Microsoft Entra, ir jāizveido skaidra paraugprakse šo sesiju taimautu apstrādei. Vai ir labāk, ja SP sesija tiek pārtraukta vienkārši SP līmenī, vai arī tam vajadzētu izraisīt SLO, kas izslēdz lietotāju no IDP konta?
Izmantojot reālus piemērus, lai ilustrētu visefektīvākos paņēmienus sesiju noildzes apstrādei un gan drošības, gan lietojamības garantēšanai, šajā rakstā ir apskatīta standarta prakse un standarti SAML 2.0 SLO notikumu apstrādei šādās situācijās.
Komanda | Lietošanas piemērs |
---|---|
session() | Izmanto Express lietojumprogrammā, lai kontrolētu lietotāju sesijas. Piemērā tas palīdz uzraudzīt lietotāja aktivitātes un sesijas taimautus, lai vajadzības gadījumā varētu aktivizēt atteikšanās loģiku. |
maxAge | Norāda laika posmu, kurā sesijas sīkfails ir derīgs. Šajā gadījumā taimeris ir iestatīts tā, lai tas beigtos pēc 600 000 milisekundēm jeb 10 minūtēm un sāktu atteikšanās notikumu. |
create_logout_request_url() | Kad pakalpojumu sniedzēja sesija beidzas, ar šo SAML2 bibliotēkas metodi izveidotais vienotās atteikšanās (SLO) pieprasījuma URL tiek pārsūtīts uz identitātes nodrošinātāju (IDP). |
readFileSync() | Sinhroniski nolasa atslēgu failus un sertifikātus, kas nepieciešami SAML2 pakalpojumu sniedzēja iestatīšanai. Lai pakalpojumu sniedzējs un identitātes nodrošinātājs varētu droši sazināties, šie sertifikāti ir nepieciešami. |
assert_endpoint | Norāda URL, kuru pēc veiksmīgas autentifikācijas identitātes nodrošinātājs izmantos SAML apgalvojuma pārsūtīšanai. To darot, tiek garantēts Pakalpojumu sniedzēja lietotāja autentifikācijas līmenis. |
window.onload | Šis notikums tiek izmantots, lai priekšgalā atiestatītu sesijas neaktivitātes taimeri. Tas nodrošina, ka tad, kad lietotājs pirmo reizi ielādē programmu, taimeris sākas no jauna. |
onmousemove | Lai atiestatītu sesijas taimeri, šis notikumu uztvērējs nosaka jebkuru peles kustību. Tas ir svarīgi, lai sekotu līdzi lietotāju uzvedībai un novērstu nejaušas sesijas noildzes. |
fetch() | Izmanto, lai asinhroni nosūtītu SLO pieprasījumu pēc sesijas taimauta uz serveri. Lai izveidotu savienojumu ar identitātes nodrošinātāju un izietu lietotāju no IDP, tas iedarbina aizmugures loģiku. |
setTimeout() | Šī priekšgala koda funkcija izraisa sesijas taimauta notikumu pēc iepriekš noteikta neaktivitātes līmeņa. Tas ir būtiski, lai sekotu līdzi lietotāju uzvedībai un ieviestu drošības noteikumus. |
Vienas atteikšanās optimizēšana, izmantojot SAML 2.0 sesijas taimauta apstrādi
Izmantojot Node.js un Express, aizmugursistēmas skripts vienotas atteikšanās (SLO) apstrādei koncentrējas uz spēju izsekot lietotāja sesijas beigām un iniciēt atteikšanās secību pakalpojumu sniedzēja (SP) un identitātes nodrošinātāja (IDP) līmenī. Šīs argumentācijas pamatā ir Express sesiju pārvaldība. Mēs izveidojam sprūda punktu, iestatot sesijas pārtraukšanu pēc iepriekš noteikta bezdarbības ilguma — mūsu piemērā — desmit minūtes. Kad sesija beidzas, skripts izmanto metodi `create_logout_request_url()}, lai sāktu SAML 2.0 atteikšanās pieprasījumu, kas pēc tam izveido savienojumu ar IDP (šajā gadījumā Microsoft Entra), lai pilnībā beigtu lietotāja sesiju. Tas uzlabo drošību, garantējot, ka lietotājs ir pilnībā atteicies no sistēmas.
Mēs ielādējam SAML sertifikāti un ievadiet lietojumprogrammas atslēgas, izmantojot komandu `readFileSync()}, lai iespējotu drošu saziņu starp SP (MyApp) un IDP (Microsoft Entra). Autentificējot atteikšanās pieprasījumu, šie sertifikāti aizsargā pret nelikumīgu atteikšanos un garantē, ka saziņa paliek šifrēta un apstiprināta. Lietotājs tiek nosūtīts uz atteikšanās pieprasījuma URL pēc tā ģenerēšanas, kur IDP apstrādā atteikšanos un, ja nepieciešams, pabeidz lietotāja sesiju visās saistītajās lietojumprogrammās. Lai saglabātu vairāku lietojumprogrammu vienreizējās pierakstīšanās (SSO) instalāciju drošību un integritāti, ir nepieciešama šī divvirzienu saziņa.
JavaScript skripts ir būtisks lietotāja darbību izsekošanai reāllaikā priekšgalā. Katru reizi, kad lietotājs mijiedarbojas ar programmu, mēs atiestatām sesijas taimautu, izmantojot notikumu uztvērējus, piemēram, “onmousemove}” un “onkeypress”. Taimeris, kas tika iestatīts ar “setTimeout()”, brīdina lietotāju un automātiski izraksta viņu no SP (MyApp), kad lietotājs kļūst dīkstāvē. Pēc atteikšanās iepriekš aptvertais SAML 2.0 atteikšanās process tiek sākts, priekšgala skriptam nosūtot SLO pieprasījumu aizmugursistēmai, izmantojot funkciju "fetch()". Šis paņēmiens nodrošina, ka neaktivitāte SP līmenī tiek novērsta ātri, droši un bez kļūmēm.
Kad SAML 2.0 integrācija un sesijas vadība ir apvienoti, lietotāja pieredze ir nevainojama un tiek ievēroti drošības standarti. Lai neļautu lietotājam palikt autentificētam ilgāk, nekā atļauts dīkstāves laikā, sesijas taimauts iniciē gan vietējā SP, gan IDP atteikšanos. Lai gan SAML 2.0 neprasa nekādu īpašu rīcību attiecībā uz sesijas taimautu, parasti tiek pieņemts, ka SLO iniciēšanai tiek izmantota sesijas beigu termiņš. Pabeidzot dīkstāves sesijas, tiek panākts līdzsvars starp drošību un lietotāja pieredzi, iespējojot sinhronizētu atteikšanos dažādās ar SSO saistītās platformās.
Node.js un Express izmantošana, lai apstrādātu SAML 2.0 vienu atteikšanos ar sesijas taimautu
Aizmugursistēmas metode SAML 2.0 SLO pārvaldībai ar pakalpojumu sniedzēja sesijas taimautiem, izmantojot Node.js un Express. Šis risinājums izmanto SAML pieprasījumus, lai pārbaudītu, vai sesijai ir beidzies derīguma termiņš, un uzsāktu SLO identitātes nodrošinātāja līmenī.
// 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 priekšgala un dīkstāves noildzes noteikšanas izmantošana, lai apstrādātu SAML 2.0 SLO
Priekšgala metodē sesijas taimauts tiek noteikts, izmantojot vaniļas JavaScript, lai pārraudzītu lietotāja neaktivitāti un iniciētu vienreizējo izteikšanos (SLO). Tas norāda Pakalpojumu sniedzējam nosūtīt SLO pieprasījumu identitātes nodrošinātājam.
// 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 izpēte: viena atteikšanās un neaktivitātes noildze
Kā darbojas SAML 2.0 vienreizēja atteikšanās (SLO). neaktivitāte pakalpojumu sniedzēja (SP) līmenī ir kritiska pārvaldāmā sastāvdaļa. Lai gan ir acīmredzams, ka manuāla atteikšanās no SP izraisītu arī identitātes nodrošinātāja (IDP) atteikšanos, neaktivitātes izraisītais sesijas taimauts situāciju sarežģī. SAML 2.0 standartā nav skaidri norādīts, kā SLO jāapstrādā sesijas termiņa beigās. Tomēr tas ļauj pieņemt labāko praksi, kas var uzlabot lietotāja pieredzi un drošību.
Piemēram, pat pēc tam, kad tie ir izslēgti no SP neaktivitātes dēļ, lietotāji, kuri piesakās lietojumprogrammā, piemēram, MyApp, izmantojot Microsoft Entra (IDP), bieži paliek pieteikušies IDP. Ja lietotājs uzskata, ka ir pilnībā atteicies, kamēr citas lietotnes, kas izmanto to pašu SSO joprojām darbojas, tas var palielināt bažas par drošību. SAML sesijas pārvaldības iestatīšana, lai imitētu SP noildzes notikumu IDP līmenī un garantētu sinhronizētas atteikšanās, ir viens no veidiem, kā samazināt šo risku.
Vēl viens faktors ir priekšgala koda dīkstāves noteikšanas metožu ieviešana. Izstrādātāji var paredzēt neaktivitātes laikus un brīdināt lietotājus pirms sesijas beigām, lietotāju darbībām izmantojot notikumu uztvērējus. Izmantojot to, lietotāji var saglabāt kontroli pār savām sesijām un pārliecināties, ka viņu SSO sesija nedarbojas nepārtraukti. SSO integrētā vidē izstrādātāji var saglabāt drošību un lietotāja komfortu, panākot līdzsvaru starp šiem faktoriem.
Bieži uzdotie jautājumi par SAML 2.0 SLO un sesijas taimautiem
- Kas notiek pakalpojumu sniedzēja līmenī, kad sesijas noildze?
- Parasti lietotājs tiek izrakstīts no programmas, kad sesijas noildze SP līmenī. Tomēr tas ir atkarīgs no sistēmas iestatīšanas, jo SAML 2.0 specifikācijai nav nepieciešams IDP izraisīt SLO.
- Vai pakalpojumu sniedzēja sesijas taimauta dēļ identitātes nodrošinātāja SLO jāaktivizē?
- To nosaka organizācijas politika. Lai gan SAML 2.0 to nedod, daudzi izvēlas iestatīt SLO IDP, kad SP sesija beidzas drošības apsvērumu dēļ.
- Kad beidzas neaktīvā sesija, kā es varu panākt SLO?
- Sesijas derīguma termiņu var noteikt, izmantojot aizmugurmehānismu, kas pēc tam sāk a create_logout_request_url() procedūru, lai iesniegtu SLO pieprasījumu IDP.
- Kā priekšgalā tiek noteikta sesijas neaktivitāte?
- Pasākumu klausītājiem patīk kā onmousemove un onkeypress parasti izmanto, lai izsekotu neaktivitāti, jo tie atiestata taimeri katru reizi, kad lietotājs mijiedarbojas ar lietojumprogrammu.
- Vai pēc atteikšanās no SP ir droši atvērt IDP sesiju?
- Drošības risks var rasties, atstājot IDP sesiju atvērtu, it īpaši, ja lietotājs uzskata, ka ir pilnībā izrakstījies. Ieteicams iestatīt SLO, lai atkārtotu SP sesijas termiņu.
SAML 2.0 sesijas noildzes pārvaldības pabeigšana
Lai uzturētu drošību SSO sistēmā, ir jāpārliecinās, ka identitātes nodrošinātājs un pakalpojumu sniedzējs sinhronizē savus atteikšanās procesus. Lai gan SAML 2.0 nenosaka, kā rīkoties ar sesijas taimautu, daudzi uzņēmumi apstrādā atsevišķas atteikšanās gadījumus vienotā veidā.
SLO pieprasījumu ieteicams nosūtīt katru reizi, kad Pakalpojumu sniedzēja sesija beidzas neaktivitātes dēļ, lai uzlabotu drošību. Tas nodrošina, ka lietotājs ir atteicies no identitātes nodrošinātāja, kā arī no lietojumprogrammas, izvairoties no nevēlamas piekļuves daudzās platformās.
SAML 2.0 paraugprakses atsauces un avoti
- Detalizētu dokumentāciju par SAML 2.0 un vienas atteikšanās standartiem un vadlīnijām var atrast oficiālajā OASIS SAML 2.0 pamata specifikācija .
- Lai iegūtu ieskatu par Microsoft Entra un tās integrāciju ar SSO un SLO, skatiet oficiālo Microsoft dokumentāciju par Azure Active Directory un SAML .
- Piemēros izmantoto Node.js SAML bibliotēku kopā ar sesiju pārvaldības metodēm var sīkāk izpētīt vietnē SAML2-js bibliotēkas dokumentācija .
- Lai izprastu paraugpraksi vienreizējās pierakstīšanās un sesiju pārvaldības konfigurēšanā, skatiet rakstu par SSO paraugprakse autors 0.