Рекомендації щодо одноразового виходу з системи SAML 2.0 після бездіяльності постачальника послуг

SAML

Розуміння SAML 2.0. Один вихід із системи після тайм-ауту сеансу

Оскільки системи єдиного входу (SSO) SAML 2.0 дозволяють користувачам входити в різні програми за допомогою єдиного набору облікових даних, вони значно спростили автентифікацію користувачів. Але є також значні проблеми з поняттям Single Log Out (SLO), особливо щодо того, що відбувається, коли сеанс користувача в постачальника послуг (SP) закінчується, оскільки він не ввійшов. У цьому випадку чи повинен постачальник ідентифікаційної інформації (ВПО) сеанс також закінчився?

Керування сеансом між SP і IDP має важливе значення для забезпечення безпечного та ефективного доступу в контексті SAML 2.0. Не завжди очевидно, коли сеанс SP завершується, чи користувач все ще має бути підключений до IDP, що може вплинути на інші програми, пов’язані з тим самим IDP. Це викликає питання щодо зручності використання та безпеки.

Багатьом підприємствам, особливо тим, які використовують такі інтерфейси, як Microsoft Entra, необхідно встановити чітку найкращу практику обробки цих тайм-аутів сеансу. Чи краще, щоб сеанс SP зупинявся просто на рівні SP, чи це також має призвести до SLO, який виводить користувача з облікового запису IDP?

Використовуючи реальні приклади для ілюстрації найефективніших методів обробки тайм-аутів сеансу та гарантування безпеки та зручності використання, у цьому документі розглядаються стандартні практики та стандарти обробки подій SAML 2.0 SLO у таких ситуаціях.

Команда Приклад використання
session() Використовується в програмі Express для керування сеансами користувачів. У прикладі це допомагає відстежувати активність користувача та тайм-аути сеансу, щоб за потреби можна було запустити логіку виходу.
maxAge Визначає проміжок часу, протягом якого сеансовий файл cookie є дійсним. У цьому випадку таймер налаштовано на закінчення через 600 000 мілісекунд, або 10 хвилин, і ініціює подію виходу з системи.
create_logout_request_url() Коли сеанс постачальника послуг завершується, URL-адреса запиту єдиного виходу (SLO), створена цим методом бібліотеки SAML2, пересилається постачальнику ідентифікаційної інформації (IDP).
readFileSync() Синхронно зчитує файли ключів і сертифікати, що необхідно для налаштування постачальника послуг SAML2. Щоб постачальник послуг і постачальник ідентифікаційної інформації могли безпечно спілкуватися, ці сертифікати необхідні.
assert_endpoint Вказує URL-адресу, яку після успішної автентифікації постачальник ідентифікаційної інформації використовуватиме для передачі твердження SAML. Таким чином гарантується рівень автентифікації користувача на рівні постачальника послуг.
window.onload Ця подія використовується для скидання таймера неактивності сеансу у інтерфейсі. Він гарантує, що коли користувач завантажує програму вперше, таймер запускається спочатку.
onmousemove Щоб скинути таймер сеансу, цей прослуховувач подій виявляє будь-який рух миші. Це важливо для спостереження за поведінкою користувачів і запобігання випадковим тайм-аутам сеансу.
fetch() Використовується для асинхронного надсилання запиту SLO на сервер після тайм-ауту сеансу. Для підключення до постачальника ідентифікаційної інформації та виходу користувача з IDP вмикається серверна логіка.
setTimeout() Ця функція в коді зовнішнього інтерфейсу призводить до того, що подія тайм-ауту сеансу виникає після попередньо визначеної кількості бездіяльності. Це важливо для спостереження за поведінкою користувачів і виконання правил безпеки.

Оптимізація одноразового виходу з обробки часу очікування сеансу SAML 2.0

Використання і Express, серверний сценарій для обробки одноразового виходу (SLO) зосереджується на можливості відстежувати закінчення сеансу користувача та ініціювати послідовність виходу на рівнях постачальника послуг (SP) і постачальника ідентифікаційної інформації (IDP). Керування експрес-сеансами лежить в основі цього міркування. Ми встановлюємо точку запуску, встановлюючи завершення сеансу після попередньо визначеної кількості бездіяльності — десять хвилин у нашому прикладі. Коли сеанс завершується, сценарій використовує метод `create_logout_request_url()} для запуску запиту на вихід SAML 2.0, який потім підключається до IDP (у цьому випадку, ), щоб повністю завершити сеанс користувача. Це підвищує безпеку, гарантуючи, що користувач повністю вийшов із системи.

Завантажуємо і вводить ключі в програму за допомогою команди `readFileSync()}, щоб увімкнути безпечний зв’язок між SP (MyApp) і IDP (Microsoft Entra). Автентифікуючи запит на вихід, ці сертифікати захищають від незаконних виходів і гарантують, що зв’язок залишається зашифрованим і підтвердженим. Користувача надсилають за URL-адресою запиту на вихід після його створення, де IDP обробляє вихід із системи та, якщо потрібно, завершує сеанс користувача в усіх пов’язаних програмах. Підтримка безпеки та цілісності інсталяцій системи єдиного входу (SSO) із кількома програмами вимагає такого двостороннього зв’язку.

Сценарій JavaScript необхідний для відстеження дій користувачів у режимі реального часу на інтерфейсі. Кожного разу, коли користувач взаємодіє з програмою, ми скидаємо тайм-аут сеансу за допомогою прослуховувачів подій, таких як `onmousemove} і `onkeypress`. Таймер, встановлений за допомогою `setTimeout()`, попереджає користувача та автоматично виводить його з SP (MyApp), коли користувач стає неактивним. Після виходу з системи процес виходу з системи SAML 2.0, про який було згадано раніше, запускається сценарієм інтерфейсу, який надсилає запит SLO на серверну систему за допомогою `fetch()`. Ця техніка гарантує, що бездіяльність на рівні SP вирішується швидко, безпечно та без збоїв.

Коли інтеграція SAML 2.0 і об’єднані, користувальницький досвід бездоганний, а стандарти безпеки дотримуються. Щоб запобігти автентифікації користувача довше, ніж це дозволено під час бездіяльності, тайм-аут сеансу ініціює як локальний вихід SP, так і IDP. Хоча SAML 2.0 не вимагає жодних особливих дій щодо тайм-аутів сеансу, загальноприйнято вважати найкращою практикою використання закінчення сеансу для ініціювання SLO. Припиняючи неактивні сеанси, він досягає балансу між безпекою та досвідом користувача, увімкнувши синхронізований вихід із системи на різних платформах, підключених до SSO.

Використання Node.js і Express для обробки SAML 2.0 Single Log Out із тайм-аутом сеансу

Бекенд-метод для керування 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 і виявлення часу простою для обробки SAML 2.0 SLO

У методі інтерфейсу тайм-аут сеансу виявляється за допомогою ванільного JavaScript для моніторингу бездіяльності користувача та ініціювання одноразового виходу (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: один вихід із системи та час очікування бездіяльності

Як SAML 2.0 Single Log Out (SLO) адреси на рівні постачальника послуг (SP) є критично важливим компонентом для управління. Хоча очевидно, що вихід із системи вручну на SP також повинен спричинити вихід із системи постачальника ідентифікаційної інформації (IDP), час очікування сеансу, викликаний бездіяльністю, ускладнює ситуацію. Стандарт SAML 2.0 чітко не визначає, як слід обробляти SLO після закінчення сеансу. Однак це дозволяє застосувати найкращі практики, які можуть покращити взаємодію з користувачем і захистити його.

Наприклад, навіть після виключення з SP через бездіяльність користувачі, які входять у такий додаток, як MyApp через Microsoft Entra (IDP), часто залишаються в системі IDP. Якщо користувач вважає, що він повністю вийшов із системи, а інші програми, які використовують той самий єдиний вход, все ще працюють, це може викликати . Налаштування керування сеансом SAML для імітації події тайм-ауту SP на рівні IDP і гарантування синхронізованих виходів є одним із способів зменшити цей ризик.

Іншим чинником є ​​реалізація методів виявлення неактивності в інтерфейсному коді. Розробники можуть передбачити час бездіяльності та попередити користувачів до завершення сеансу за допомогою прослуховувачів подій для активності користувачів. Використовуючи це, користувачі можуть контролювати свої сеанси та переконатися, що їхні не працює постійно. В інтегрованому середовищі SSO розробники можуть зберегти безпеку та комфорт користувачів, встановивши баланс між цими факторами.

  1. Що відбувається на рівні постачальника послуг, коли сеанс закінчується?
  2. Зазвичай користувач виходить із програми, коли закінчується час очікування сеансу на рівні SP. Однак це залежить від того, як налаштовано систему, оскільки специфікація SAML 2.0 не вимагає, щоб це викликало SLO на IDP.
  3. Чи повинен SLO у постачальника ідентифікаційної інформації ініціюватися тайм-аутом сеансу постачальника послуг?
  4. Це регулюється політикою організації. Хоча SAML 2.0 не вимагає цього, багато хто вирішує вмикати SLO на IDP після завершення сеансу SP з міркувань безпеки.
  5. Коли неактивний сеанс закінчується, як я можу зробити SLO?
  6. Закінчення сеансу можна виявити за допомогою механізму серверної частини, який потім ініціює a процедура подання запиту SLO до ВПО.
  7. Як виявляється бездіяльність сеансу на інтерфейсі?
  8. Слухачі події люблять як і зазвичай використовуються для відстеження бездіяльності, оскільки вони скидають таймер кожного разу, коли користувач взаємодіє з програмою.
  9. Чи безпечно відкривати сеанс IDP після виходу з SP?
  10. Залишення сеансу IDP відкритим може спричинити загрозу безпеці, особливо якщо користувач вважає, що він повністю вийшов. Рекомендується налаштувати SLO для реплікації закінчення сеансу SP.

Підтримка безпеки в системі SSO вимагає переконатися, що постачальник ідентифікаційної інформації та постачальник послуг синхронізують свої процеси виходу. Незважаючи на те, що SAML 2.0 не визначає, як слід обробляти тайм-аути сеансу, багато компаній обробляють окремі виходи єдиним способом.

Рекомендується надсилати запит SLO кожного разу, коли сеанс постачальника послуг завершується через бездіяльність, щоб покращити безпеку. Це гарантує, що користувач вийшов із постачальника ідентифікаційної інформації, а також програми, уникаючи небажаного доступу на багатьох платформах.

  1. Детальну документацію щодо стандартів і рекомендацій SAML 2.0 і Single Log Out можна знайти в офіційному Основна специфікація OASIS SAML 2.0 .
  2. Щоб дізнатися більше про Microsoft Entra та її інтеграцію з SSO та SLO, зверніться до офіційної документації Microsoft Azure Active Directory і SAML .
  3. Бібліотеку SAML Node.js, використану в прикладах, разом із технікою керування сеансами можна вивчити далі на Документація бібліотеки SAML2-js .
  4. Щоб зрозуміти найкращі методи налаштування системи єдиного входу та керування сеансами, перегляньте статтю Найкращі методи SSO автор: Auth0.