Κατανόηση του SAML 2.0 Single Log Out After Session Timeout
Επειδή τα συστήματα SAML 2.0 Single Sign-On (SSO) επιτρέπουν στους χρήστες να συνδέονται σε διάφορες εφαρμογές χρησιμοποιώντας ένα μόνο σύνολο διαπιστευτηρίων, έχουν απλοποιήσει σημαντικά τον έλεγχο ταυτότητας χρήστη. Ωστόσο, υπάρχουν επίσης σημαντικά ζητήματα με την έννοια Single Log Out (SLO), ειδικά όσον αφορά το τι συμβαίνει όταν η περίοδος σύνδεσης ενός χρήστη λήγει σε έναν Πάροχο Υπηρεσιών (SP), καθώς δεν έχει συνδεθεί. Σε αυτήν την περίπτωση, θα πρέπει ο πάροχος ταυτότητας Τέλος συνεδρίας (IDP) επίσης;
Η διαχείριση συνεδρίας μεταξύ του SP και του IDP είναι απαραίτητη για τη διασφάλιση ασφαλούς και αποτελεσματικής πρόσβασης στο πλαίσιο του SAML 2.0. Δεν είναι πάντα προφανές πότε τελειώνει μια περίοδος λειτουργίας SP εάν ο χρήστης πρέπει να είναι ακόμα συνδεδεμένος στο IDP, κάτι που θα μπορούσε να έχει αντίκτυπο σε άλλες εφαρμογές που είναι συνδεδεμένες με το ίδιο IDP. Αυτό εγείρει ερωτήματα σχετικά με τη χρηστικότητα καθώς και την ασφάλεια.
Μια σαφής βέλτιστη πρακτική για τον χειρισμό αυτών των χρονικών ορίων περιόδου λειτουργίας πρέπει να καθιερωθεί από πολλές επιχειρήσεις, ιδιαίτερα εκείνες που χρησιμοποιούν διεπαφές όπως το Microsoft Entra. Είναι καλύτερο η συνεδρία ενός SP να σταματήσει απλώς σε επίπεδο SP ή θα πρέπει επίσης να οδηγήσει σε SLO που αποσυνδέει τον χρήστη από τον λογαριασμό IDP του;
Χρησιμοποιώντας παραδείγματα πραγματικού κόσμου για την απεικόνιση των πιο αποτελεσματικών τεχνικών για το χειρισμό των χρονικών ορίων συνεδρίας και την εγγύηση ασφάλειας και χρηστικότητας, αυτό το άρθρο εξετάζει τυπικές πρακτικές και πρότυπα για το χειρισμό συμβάντων SAML 2.0 SLO σε τέτοιες καταστάσεις.
Εντολή | Παράδειγμα χρήσης |
---|---|
session() | Χρησιμοποιείται στην εφαρμογή Express για τον έλεγχο των συνεδριών χρήστη. Στο παράδειγμα, βοηθά στην παρακολούθηση της δραστηριότητας των χρηστών και των χρονικών ορίων περιόδου σύνδεσης, ώστε να μπορεί να ενεργοποιηθεί η λογική αποσύνδεσης όταν χρειάζεται. |
maxAge | Καθορίζει το χρονικό πλαίσιο που είναι έγκυρο το cookie περιόδου λειτουργίας. Σε αυτήν την περίπτωση, ο χρονοδιακόπτης έχει οριστεί να λήξει μετά από 600000 χιλιοστά του δευτερολέπτου ή 10 λεπτά και να ξεκινήσει ένα συμβάν αποσύνδεσης. |
create_logout_request_url() | Όταν η περίοδος λειτουργίας του παρόχου υπηρεσιών τερματίζεται, η διεύθυνση URL αιτήματος Single Log Out (SLO) που δημιουργήθηκε από αυτήν τη μέθοδο βιβλιοθήκης SAML2 προωθείται στον πάροχο ταυτότητας (IDP). |
readFileSync() | Διαβάζει τα βασικά αρχεία και τα πιστοποιητικά συγχρονισμένα, κάτι που είναι απαραίτητο για τη ρύθμιση του παρόχου υπηρεσιών SAML2. Προκειμένου ο Πάροχος Υπηρεσιών και ο Πάροχος Ταυτότητας να επικοινωνούν με ασφάλεια, αυτές οι πιστοποιήσεις είναι απαραίτητες. |
assert_endpoint | Υποδεικνύει τη διεύθυνση URL που, μετά τον επιτυχή έλεγχο ταυτότητας, θα χρησιμοποιήσει ο πάροχος ταυτότητας για τη μετάδοση του ισχυρισμού SAML. Με αυτόν τον τρόπο, το επίπεδο ελέγχου ταυτότητας χρήστη του Παρόχου Υπηρεσιών είναι εγγυημένο. |
window.onload | Αυτό το συμβάν χρησιμοποιείται για την επαναφορά του χρονοδιακόπτη αδράνειας περιόδου λειτουργίας στη διεπαφή. Διασφαλίζει ότι όταν ο χρήστης φορτώνει το πρόγραμμα για πρώτη φορά, ο χρονοδιακόπτης ξεκινά από την αρχή. |
onmousemove | Για να επαναφέρετε το χρονόμετρο περιόδου λειτουργίας, αυτό το πρόγραμμα ακρόασης συμβάντων εντοπίζει οποιαδήποτε κίνηση του ποντικιού. Είναι απαραίτητο για την παρακολούθηση της συμπεριφοράς των χρηστών και την αποφυγή τυχαίων χρονικών ορίων περιόδου λειτουργίας. |
fetch() | Χρησιμοποιείται για την ασύγχρονη αποστολή ενός αιτήματος SLO, μετά το χρονικό όριο της περιόδου λειτουργίας, στον διακομιστή. Προκειμένου να συνδεθεί με τον πάροχο ταυτότητας και να αποσυνδεθεί ο χρήστης από το IDP, απενεργοποιεί τη λογική υποστήριξης. |
setTimeout() | Αυτή η συνάρτηση στον κώδικα διεπαφής προκαλεί το συμβάν χρονικού ορίου περιόδου σύνδεσης να συμβεί μετά την προκαθορισμένη ποσότητα αδράνειας. Είναι απαραίτητο για την παρακολούθηση της συμπεριφοράς των χρηστών και την εφαρμογή κανονισμών ασφαλείας. |
Βελτιστοποίηση μεμονωμένης αποσύνδεσης με διαχείριση χρονικού ορίου περιόδου λειτουργίας SAML 2.0
Χρησιμοποιώντας Node.js και Express, η δέσμη ενεργειών υποστήριξης για το χειρισμό Single Log Out (SLO) εστιάζει στη δυνατότητα παρακολούθησης της λήξης περιόδου σύνδεσης χρήστη και εκκίνησης μιας ακολουθίας αποσύνδεσης σε επίπεδο Παροχέα υπηρεσιών (SP) και Identity Provider (IDP). Η διαχείριση των συνεδριών Express βρίσκεται στο επίκεντρο αυτού του συλλογισμού. Καθιερώνουμε ένα σημείο ενεργοποίησης θέτοντας τη συνεδρία να τερματίζεται μετά από ένα προκαθορισμένο ποσό αδράνειας — δέκα λεπτά, στο παράδειγμά μας. Όταν τελειώσει η περίοδος λειτουργίας, το σενάριο χρησιμοποιεί τη μέθοδο `create_logout_request_url()} για να ξεκινήσει ένα αίτημα αποσύνδεσης SAML 2.0, το οποίο στη συνέχεια συνδέεται με το IDP (σε αυτήν την περίπτωση, Microsoft Entra) για να τερματίσετε εντελώς τη συνεδρία χρήστη. Αυτό ενισχύει την ασφάλεια διασφαλίζοντας ότι ο χρήστης έχει αποσυνδεθεί πλήρως από το σύστημα.
Φορτώνουμε Πιστοποιητικά SAML και πληκτρολογεί την εφαρμογή χρησιμοποιώντας την εντολή `readFileSync()} για να ενεργοποιήσει την ασφαλή επικοινωνία μεταξύ του SP (MyApp) και του IDP (Microsoft Entra). Με τον έλεγχο ταυτότητας του αιτήματος αποσύνδεσης, αυτά τα πιστοποιητικά προστατεύουν από παράνομες αποσυνδέσεις και εγγυώνται ότι η επικοινωνία παραμένει κρυπτογραφημένη και επιβεβαιωμένη. Ο χρήστης αποστέλλεται στη διεύθυνση URL αιτήματος αποσύνδεσης αφού δημιουργηθεί, όπου ο IDP χειρίζεται την αποσύνδεση και, εάν απαιτείται, τερματίζει τη συνεδρία του χρήστη σε τυχόν συσχετισμένες εφαρμογές. Η διατήρηση της ασφάλειας και της ακεραιότητας των εγκαταστάσεων Single Sign-On (SSO) πολλαπλών εφαρμογών απαιτεί αυτήν την αμφίδρομη επικοινωνία.
Το σενάριο JavaScript είναι απαραίτητο για την παρακολούθηση των δραστηριοτήτων των χρηστών σε πραγματικό χρόνο στο μπροστινό μέρος. Κάθε φορά που ο χρήστης αλληλεπιδρά με το πρόγραμμα, επαναφέρουμε το χρονικό όριο λήξης της περιόδου σύνδεσης χρησιμοποιώντας προγράμματα ακρόασης συμβάντων όπως "onmousemove} και "onkeypress". Ένας χρονοδιακόπτης που ορίστηκε με `setTimeout()` ειδοποιεί τον χρήστη και τον αποσυνδέει αυτόματα από το SP (MyApp) όταν ο χρήστης μείνει σε αδράνεια. Μετά την αποσύνδεση, η διαδικασία αποσύνδεσης SAML 2.0 που καλύφθηκε προηγουμένως ξεκινά από το σενάριο διεπαφής που στέλνει ένα αίτημα SLO στο backend χρησιμοποιώντας το "fetch()". Αυτή η τεχνική διασφαλίζει ότι η αδράνεια σε επίπεδο SP αντιμετωπίζεται άμεσα, με ασφάλεια και χωρίς αποτυχία.
Κατά την ενσωμάτωση SAML 2.0 και διαχείριση συνεδρίας συνδυάζονται, η εμπειρία χρήστη είναι απρόσκοπτη και τα πρότυπα ασφαλείας τηρούνται. Προκειμένου να αποτραπεί ο έλεγχος ταυτότητας του χρήστη για μεγαλύτερο χρονικό διάστημα από το επιτρεπόμενο κατά τη διάρκεια της αδράνειας, το χρονικό όριο περιόδου λειτουργίας ξεκινά τόσο την τοπική αποσύνδεση SP όσο και την αποσύνδεση IDP. Παρόλο που το SAML 2.0 δεν απαιτεί ιδιαίτερη συμπεριφορά όσον αφορά τα χρονικά όρια περιόδου λειτουργίας, είναι γενικά αποδεκτό ως βέλτιστη πρακτική η χρήση της λήξης περιόδου σύνδεσης για την έναρξη του SLO. Τερματίζοντας τις περιόδους αδράνειας, επιτυγχάνει μια ισορροπία μεταξύ ασφάλειας και εμπειρίας χρήστη, επιτρέποντας συγχρονισμένες αποσυνδέσεις σε διάφορες πλατφόρμες που συνδέονται με SSO.
Χρήση Node.js και Express για τη διαχείριση SAML 2.0 Single Log Out με Session Timeout
Μέθοδος υποστήριξης για τη διαχείριση του SAML 2.0 SLO με χρονικά όρια περιόδου λειτουργίας παρόχου υπηρεσιών χρησιμοποιώντας το Node.js και το Express. Αυτή η λύση χρησιμοποιεί αιτήματα SAML για να ελέγξει εάν η περίοδος λειτουργίας έχει λήξει και να εκκινήσει το SLO σε επίπεδο παρόχου ταυτότητας.
// 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 Frontend και ανίχνευσης χρονικού ορίου αδράνειας για χειρισμό SAML 2.0 SLO
Σε μια μέθοδο frontend, ένα χρονικό όριο περιόδου λειτουργίας ανιχνεύεται χρησιμοποιώντας τη JavaScript vanilla για την παρακολούθηση της αδράνειας χρήστη και την εκκίνηση Single Log Out (SLO). Αυτό λέει στον πάροχο υπηρεσιών να εκδώσει ένα αίτημα SLO στον πάροχο ταυτότητας.
// 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: Single Log Out και Timeout αδράνειας
Πώς διευθύνει το SAML 2.0 Single Log Out (SLO). αδράνεια σε επίπεδο Παρόχου Υπηρεσιών (SP) είναι ένα κρίσιμο στοιχείο για διαχείριση. Αν και είναι προφανές ότι μια μη αυτόματη αποσύνδεση στο SP θα πρέπει να προκαλέσει και την αποσύνδεση του Identity Provider (IDP), τα χρονικά όρια περιόδου λειτουργίας που προκαλούνται από την αδράνεια περιπλέκουν τα πράγματα. Το πρότυπο SAML 2.0 δεν δηλώνει με σαφήνεια τον τρόπο χειρισμού του SLO κατά τη λήξη της περιόδου λειτουργίας. Αυτό, ωστόσο, επιτρέπει την υιοθέτηση βέλτιστων πρακτικών που μπορούν να βελτιώσουν την εμπειρία και την ασφάλεια των χρηστών.
Για παράδειγμα, ακόμη και μετά τον αποκλεισμό τους από το SP λόγω αδράνειας, οι χρήστες που συνδέονται σε μια εφαρμογή όπως το MyApp μέσω του Microsoft Entra (IDP) παραμένουν συχνά συνδεδεμένοι στο IDP. Εάν ο χρήστης πιστεύει ότι έχει αποσυνδεθεί πλήρως ενώ άλλες εφαρμογές που χρησιμοποιούν το ίδιο SSO εξακολουθούν να εκτελούνται, αυτό θα μπορούσε να αυξήσει ανησυχίες για την ασφάλεια. Η ρύθμιση της διαχείρισης περιόδων σύνδεσης SAML για τη μίμηση του συμβάντος λήξης χρονικού ορίου SP σε επίπεδο IDP και η εγγύηση συγχρονισμένων αποσυνδέσεων είναι ένας τρόπος μείωσης αυτού του κινδύνου.
Η εφαρμογή τεχνικών ανίχνευσης αδράνειας από τον κώδικα διεπαφής είναι ένας άλλος παράγοντας. Οι προγραμματιστές μπορούν να προβλέψουν χρόνους αδράνειας και να ειδοποιήσουν τους χρήστες πριν από τη λήξη της περιόδου σύνδεσης, χρησιμοποιώντας προγράμματα ακρόασης συμβάντων για τη δραστηριότητα των χρηστών. Χρησιμοποιώντας αυτό, οι χρήστες μπορούν να διατηρήσουν τον έλεγχο των συνεδριών τους και να βεβαιωθούν ότι έχουν Συνεδρία SSO δεν τρέχει συνέχεια. Σε ένα ενσωματωμένο περιβάλλον SSO, οι προγραμματιστές μπορούν να διατηρήσουν την ασφάλεια και την άνεση των χρηστών, επιτυγχάνοντας μια ισορροπία μεταξύ αυτών των παραγόντων.
Συνήθεις ερωτήσεις σχετικά με το SAML 2.0 SLO και τα χρονικά όρια περιόδου λειτουργίας
- Τι συμβαίνει σε επίπεδο παρόχου υπηρεσιών όταν μια περίοδος λειτουργίας λήγει;
- Συνήθως, ο χρήστης αποσυνδέεται από το πρόγραμμα όταν μια περίοδος λειτουργίας λήγει σε επίπεδο SP. Εξαρτάται από τον τρόπο ρύθμισης του συστήματος, ωστόσο, καθώς η προδιαγραφή SAML 2.0 δεν απαιτεί αυτό να προκαλέσει SLO στο IDP.
- Πρέπει να ενεργοποιηθεί ένα SLO στον πάροχο ταυτότητας από ένα χρονικό όριο περιόδου λειτουργίας του παρόχου υπηρεσιών;
- Η πολιτική του οργανισμού το διέπει αυτό. Αν και το SAML 2.0 δεν το επιβάλλει, πολλοί επιλέγουν να ενεργοποιήσουν το SLO στο IDP όταν τελειώσει η περίοδος λειτουργίας SP για λόγους ασφαλείας.
- Όταν τελειώνει μια ανενεργή συνεδρία, πώς μπορώ να πραγματοποιήσω το SLO;
- Η λήξη της περιόδου λειτουργίας μπορεί να ανιχνευθεί μέσω ενός μηχανισμού υποστήριξης, ο οποίος στη συνέχεια εκκινεί a create_logout_request_url() διαδικασία υποβολής αιτήματος SLO στον IDP.
- Πώς εντοπίζεται η αδράνεια συνεδρίας στο frontend;
- Στους ακροατές εκδηλώσεων αρέσει το as onmousemove και onkeypress χρησιμοποιούνται συνήθως για την παρακολούθηση της αδράνειας καθώς επαναφέρουν ένα χρονόμετρο κάθε φορά που ένας χρήστης αλληλεπιδρά με την εφαρμογή.
- Μετά την αποσύνδεση από το SP, είναι ασφαλές να ανοίξει η συνεδρία IDP;
- Ενδέχεται να προκύψει κίνδυνος ασφαλείας εάν αφήσετε ανοιχτή τη συνεδρία IDP, ιδιαίτερα εάν ο χρήστης πιστεύει ότι έχει κάνει πλήρη έλεγχο. Συνιστάται η ρύθμιση SLO για την αναπαραγωγή της λήξης περιόδου λειτουργίας SP.
Ολοκλήρωση διαχείρισης χρονικού ορίου περιόδου λειτουργίας SAML 2.0
Η διατήρηση της ασφάλειας σε ένα σύστημα SSO απαιτεί τη διασφάλιση ότι ο πάροχος ταυτότητας και ο πάροχος υπηρεσιών συγχρονίζουν τις διαδικασίες αποσύνδεσής τους. Παρόλο που το SAML 2.0 δεν επιβάλλει τον τρόπο χειρισμού των χρονικών ορίων περιόδου σύνδεσης, πολλές επιχειρήσεις χειρίζονται τις μεμονωμένες αποσυνδέσεις με ομοιόμορφο τρόπο.
Συνιστάται να στέλνετε ένα αίτημα SLO κάθε φορά που η περίοδος λειτουργίας του παρόχου υπηρεσιών τελειώνει λόγω αδράνειας, προκειμένου να βελτιωθεί η ασφάλεια. Αυτό διασφαλίζει ότι ο χρήστης έχει αποσυνδεθεί από τον Identity Provider καθώς και από την εφαρμογή, αποφεύγοντας την ανεπιθύμητη πρόσβαση σε πολλές πλατφόρμες.
Αναφορές και πηγές για τις βέλτιστες πρακτικές SAML 2.0
- Λεπτομερής τεκμηρίωση σχετικά με τα πρότυπα και τις οδηγίες SAML 2.0 και Single Log Out μπορείτε να βρείτε στην επίσημη Προδιαγραφές πυρήνα OASIS SAML 2.0 .
- Για πληροφορίες σχετικά με το Microsoft Entra και την ενσωμάτωσή του με το SSO και το SLO, ανατρέξτε στην επίσημη τεκμηρίωση της Microsoft για Azure Active Directory και SAML .
- Η βιβλιοθήκη SAML Node.js που χρησιμοποιείται στα παραδείγματα, μαζί με τις τεχνικές διαχείρισης συνεδρίας, μπορούν να εξερευνηθούν περαιτέρω στο Τεκμηρίωση βιβλιοθήκης SAML2-js .
- Για να κατανοήσετε τις βέλτιστες πρακτικές στη διαμόρφωση της Single Sign-On και της διαχείρισης περιόδων σύνδεσης, επισκεφτείτε το άρθρο στο Βέλτιστες πρακτικές SSO από Auth0.