Zrozumienie protokołu SAML 2.0 Pojedyncze wylogowanie po przekroczeniu limitu czasu sesji
Ponieważ systemy jednokrotnego logowania (SSO) SAML 2.0 umożliwiają użytkownikom logowanie się do różnych aplikacji przy użyciu jednego zestawu danych uwierzytelniających, znacznie uprościły uwierzytelnianie użytkowników. Istnieją jednak również istotne problemy z koncepcją pojedynczego wylogowania (SLO), zwłaszcza w odniesieniu do tego, co dzieje się, gdy sesja użytkownika wygaśnie u dostawcy usług (SP), ponieważ nie jest on zalogowany. Czy w takim przypadku dostawca tożsamości (IDP) również kończy sesję?
Zarządzanie sesjami pomiędzy SP i IDP jest niezbędne do zapewnienia bezpiecznego i wydajnego dostępu w kontekście SAML 2.0. Nie zawsze jest oczywiste, kiedy sesja SP się zakończy, czy użytkownik powinien nadal być połączony z dostawcą tożsamości, co może mieć wpływ na inne aplikacje połączone z tym samym dostawcą tożsamości. Rodzi to pytania dotyczące użyteczności i bezpieczeństwa.
Wiele firm, zwłaszcza tych korzystających z interfejsów takich jak Microsoft Entra, musi ustalić jasną, najlepszą praktykę dotyczącą obsługi przekroczeń limitu czasu sesji. Czy lepiej jest, aby sesja dostawcy usług zatrzymała się po prostu na poziomie dostawcy usług, czy też powinna skutkować również SLO, które wylogowuje użytkownika z konta dostawcy tożsamości?
Wykorzystując przykłady z życia codziennego w celu zilustrowania najskuteczniejszych technik obsługi przekroczeń limitu czasu sesji oraz zapewnienia bezpieczeństwa i użyteczności, w tym artykule zbadano standardowe praktyki i standardy obsługi zdarzeń SAML 2.0 SLO w takich sytuacjach.
Rozkaz | Przykład użycia |
---|---|
session() | Wykorzystywany w aplikacji Express do kontrolowania sesji użytkowników. W tym przykładzie pomaga monitorować aktywność użytkownika i przekroczenia limitu czasu sesji, dzięki czemu w razie potrzeby można uruchomić logikę wylogowania. |
maxAge | Określa ramy czasowe ważności pliku cookie sesji. W tym przypadku licznik czasu upłynie po 600 000 milisekundach, czyli 10 minutach, i zainicjuje zdarzenie wylogowania. |
create_logout_request_url() | Po zakończeniu sesji dostawcy usług adres URL żądania pojedynczego wylogowania (SLO) utworzony za pomocą tej metody biblioteki SAML2 jest przekazywany do dostawcy tożsamości (IDP). |
readFileSync() | Synchronicznie odczytuje pliki kluczy i certyfikaty, co jest niezbędne do skonfigurowania dostawcy usługi SAML2. Aby Usługodawca i Dostawca Tożsamości mogli się bezpiecznie komunikować, certyfikaty te są niezbędne. |
assert_endpoint | Wskazuje adres URL, którego po pomyślnym uwierzytelnieniu dostawca tożsamości użyje do przesłania potwierdzenia SAML. W ten sposób gwarantowany jest poziom uwierzytelnienia użytkownika Usługodawcy. |
window.onload | To zdarzenie służy do resetowania licznika czasu braku aktywności sesji w interfejsie użytkownika. Zapewnia to, że gdy użytkownik załaduje program po raz pierwszy, licznik czasu zacznie odliczać czas. |
onmousemove | Aby zresetować licznik sesji, ten detektor zdarzeń wykrywa każdy ruch myszy. Jest to niezbędne do monitorowania zachowań użytkowników i zapobiegania przypadkowym przekroczeniu limitu czasu sesji. |
fetch() | Służy do asynchronicznego wysyłania żądania SLO po przekroczeniu limitu czasu sesji do serwera. Aby połączyć się z dostawcą tożsamości i wylogować użytkownika z dostawcy tożsamości, uruchamia logikę zaplecza. |
setTimeout() | Ta funkcja w kodzie frontendu powoduje wystąpienie zdarzenia przekroczenia limitu czasu sesji po upływie określonego czasu braku aktywności. Niezbędne jest obserwowanie zachowań użytkowników i wdrażanie przepisów bezpieczeństwa. |
Optymalizacja pojedynczego wylogowania za pomocą obsługi przekroczenia limitu czasu sesji SAML 2.0
Używanie i Express, skrypt zaplecza do obsługi pojedynczego wylogowania (SLO) skupia się na możliwości śledzenia wygaśnięcia sesji użytkownika i inicjowania sekwencji wylogowania na poziomie dostawcy usług (SP) i dostawcy tożsamości (IDP). Zarządzanie sesjami Express leży u podstaw tego rozumowania. Ustanawiamy punkt wyzwalający, ustawiając sesję tak, aby zakończyła się po z góry określonym czasie braku aktywności – w naszym przykładzie po dziesięciu minutach. Po zakończeniu sesji skrypt używa metody `create_logout_request_url()} w celu uruchomienia żądania wylogowania SAML 2.0, które następnie łączy się z dostawcą tożsamości (w tym przypadku ), aby całkowicie zakończyć sesję użytkownika. Zwiększa to bezpieczeństwo, gwarantując całkowite wylogowanie użytkownika z systemu.
Ładujemy i klucze do aplikacji za pomocą polecenia `readFileSync()}, aby umożliwić bezpieczną komunikację pomiędzy SP (MojaAplikacja) a IDP (Microsoft Entra). Certyfikaty te, uwierzytelniając żądanie wylogowania, chronią przed nielegalnym wylogowaniem i gwarantują, że komunikacja pozostanie zaszyfrowana i potwierdzona. Po wygenerowaniu adresu URL żądania wylogowania użytkownik zostaje przekierowany na adres URL żądania wylogowania, gdzie dostawca tożsamości obsługuje wylogowanie i, jeśli to konieczne, kończy sesję użytkownika we wszystkich powiązanych aplikacjach. Utrzymanie bezpieczeństwa i integralności instalacji jednokrotnego logowania (SSO) obejmujących wiele aplikacji wymaga tej dwukierunkowej komunikacji.
Skrypt JavaScript jest niezbędny do śledzenia działań użytkowników w czasie rzeczywistym na interfejsie. Za każdym razem, gdy użytkownik wchodzi w interakcję z programem, resetujemy limit czasu sesji, używając detektorów zdarzeń, takich jak `onmousemove} i `onkeypress`. Timer ustawiony za pomocą `setTimeout()` ostrzega użytkownika i automatycznie wylogowuje go z SP (MojaAplikacja), gdy użytkownik stanie się bezczynny. Po wylogowaniu, opisany wcześniej proces wylogowania SAML 2.0 jest uruchamiany przez skrypt frontonu wysyłający żądanie SLO do backendu za pomocą `fetch()`. Dzięki tej technice brak aktywności na poziomie SP zostanie rozwiązany szybko, bezpiecznie i bezbłędnie.
Kiedy integracja SAML 2.0 i są połączone, doświadczenie użytkownika jest płynne, a standardy bezpieczeństwa są przestrzegane. Aby uniemożliwić użytkownikowi pozostawanie uwierzytelnionym dłużej niż jest to dozwolone podczas bezczynności, przekroczenie limitu czasu sesji inicjuje zarówno wylogowanie lokalnego dostawcy usług, jak i wylogowanie IDP. Chociaż SAML 2.0 nie wymaga żadnego szczególnego postępowania w odniesieniu do przekroczenia limitu czasu sesji, ogólnie przyjmuje się, że najlepszą praktyką jest wykorzystywanie wygaśnięcia sesji do inicjowania SLO. Kończąc bezczynne sesje, zapewnia równowagę między bezpieczeństwem a wygodą użytkownika, umożliwiając zsynchronizowane wylogowanie na różnych platformach połączonych za pomocą SSO.
Używanie Node.js i Express do obsługi pojedynczego wylogowania SAML 2.0 z przekroczeniem limitu czasu sesji
Metoda zaplecza do zarządzania SAML 2.0 SLO z przekroczeniami limitów czasu sesji dostawcy usług przy użyciu Node.js i Express. To rozwiązanie wykorzystuje żądania SAML w celu sprawdzenia, czy sesja wygasła i inicjuje SLO na poziomie dostawcy tożsamości.
// 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");
});
Używanie interfejsu JavaScript i wykrywania przekroczeń limitu czasu bezczynności do obsługi SAML 2.0 SLO
W metodzie frontendowej przekroczenie limitu czasu sesji jest wykrywane poprzez wykorzystanie podstawowego kodu JavaScript do monitorowania braku aktywności użytkownika i inicjowania pojedynczego wylogowania (SLO). Informuje to dostawcę usług o konieczności wysłania żądania SLO do dostawcy tożsamości.
// 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));
}
Odkrywanie protokołu SAML 2.0: pojedyncze wylogowanie i przekroczenie limitu czasu bezczynności
Jak adresy SAML 2.0 z pojedynczym wylogowaniem (SLO). na poziomie dostawcy usług (SP) jest kluczowym elementem, którym należy zarządzać. Chociaż jest oczywiste, że ręczne wylogowanie w SP powinno spowodować również wylogowanie dostawcy tożsamości (IDP), przekroczenia limitu czasu sesji spowodowane brakiem aktywności komplikują sprawę. Standard SAML 2.0 nie określa jasno, jak należy postępować z SLO po wygaśnięciu sesji. Pozwala to jednak na przyjęcie najlepszych praktyk, które mogą poprawić komfort użytkownika i bezpieczeństwo.
Na przykład, nawet po odłączeniu od dostawcy usług z powodu braku aktywności, użytkownicy logujący się do aplikacji takiej jak MyApp za pośrednictwem Microsoft Entra (IDP) często pozostają zalogowani do dostawcy tożsamości. Jeśli użytkownik uważa, że został całkowicie wylogowany, podczas gdy inne aplikacje korzystające z tego samego logowania jednokrotnego nadal działają, może to spowodować wzrost . Skonfigurowanie zarządzania sesjami SAML w celu naśladowania zdarzenia przekroczenia limitu czasu SP na poziomie dostawcy tożsamości i zagwarantowania zsynchronizowanych wylogowań to jeden ze sposobów zmniejszenia tego ryzyka.
Kolejnym czynnikiem jest implementacja w kodzie frontendowym technik wykrywania bezczynności. Programiści mogą przewidywać czasy bezczynności i ostrzegać użytkowników przed wygaśnięciem sesji, używając detektorów zdarzeń do sprawdzania aktywności użytkownika. Korzystając z tego, użytkownicy mogą zachować kontrolę nad swoimi sesjami i mieć pewność, że ich nie działa w sposób ciągły. W środowisku zintegrowanym z logowaniem jednokrotnym programiści mogą zachować bezpieczeństwo i komfort użytkownika, zachowując równowagę między tymi czynnikami.
- Co dzieje się na poziomie dostawcy usług, gdy sesja upłynie?
- Zwykle użytkownik zostaje wylogowany z programu po przekroczeniu limitu czasu sesji na poziomie SP. Zależy to jednak od konfiguracji systemu, ponieważ specyfikacja SAML 2.0 nie wymaga, aby powodowało to SLO u dostawcy tożsamości.
- Czy SLO u dostawcy tożsamości powinien być wyzwalany w wyniku przekroczenia limitu czasu sesji dostawcy usług?
- Reguluje to polityka organizacji. Chociaż SAML 2.0 tego nie wymaga, wiele osób decyduje się na ustawienie SLO w IDP po zakończeniu sesji SP ze względów bezpieczeństwa.
- Kiedy nieaktywna sesja dobiegnie końca, jak mogę włączyć SLO?
- Wygaśnięcie sesji można wykryć za pomocą mechanizmu zaplecza, który następnie inicjuje a procedura składania wniosku o SLO do IDP.
- W jaki sposób na interfejsie wykrywany jest brak aktywności sesji?
- Słuchacze zdarzeń lubią as I są powszechnie używane do śledzenia braku aktywności, ponieważ resetują licznik czasu za każdym razem, gdy użytkownik wchodzi w interakcję z aplikacją.
- Czy po wylogowaniu się z SP można bezpiecznie otworzyć sesję IDP?
- Pozostawienie otwartej sesji IDP może spowodować ryzyko bezpieczeństwa, szczególnie jeśli użytkownik uważa, że całkowicie się wylogował. Zalecane jest skonfigurowanie SLO w celu replikacji wygaśnięcia sesji SP.
Utrzymanie bezpieczeństwa w systemie SSO wymaga zapewnienia synchronizacji procesów wylogowania pomiędzy Dostawcą Tożsamości i Usługodawcą. Mimo że SAML 2.0 nie określa, w jaki sposób należy postępować z przekroczeniami limitu czasu sesji, wiele firm obsługuje pojedyncze wylogowania w jednolity sposób.
W celu poprawy bezpieczeństwa zaleca się wysyłanie żądania SLO za każdym razem, gdy sesja Usługodawcy kończy się z powodu braku aktywności. Dzięki temu użytkownik wyloguje się z dostawcy tożsamości i aplikacji, unikając niepożądanego dostępu na wielu platformach.
- Szczegółową dokumentację dotyczącą standardów i wytycznych SAML 2.0 i Single Log Out można znaleźć w oficjalnym dokumencie Specyfikacja rdzenia OASIS SAML 2.0 .
- Więcej informacji na temat Microsoft Entra i jego integracji z SSO i SLO można znaleźć w oficjalnej dokumentacji firmy Microsoft na stronie Azure Active Directory i SAML .
- Bibliotekę SAML Node.js użytą w przykładach, wraz z technikami zarządzania sesjami, można bliżej poznać na stronie Dokumentacja biblioteki SAML2-js .
- Aby zapoznać się z najlepszymi praktykami w zakresie konfigurowania pojedynczego logowania i zarządzania sesją, zapoznaj się z artykułem na temat Najlepsze praktyki SSO przez Auth0.