Единая авторизация (SSO)

Единая авторизация (англ. Single Sign-On) — технология, при использовании которой аутентификация пользователя происходит на вашем сайте, при этом аутентифицированный пользователь получает доступ к сервисам платформы Shoppilot без повторной аутентификации.

Shoppilot использует JSON Web Token (JWT) для безопасного обмена данными пользователя.

Обмен данными

После включения SSO в личном кабинете запросы на аутентификацию отправляются на указанный внешний URL.

Шаги, которые выполняются в процессе обмена данными:

  1. Неаутентифицированный в Shoppilot пользователь нажимает на вашем сайте кнопку «Оставить отзыв»
  2. Скрипт Shoppilot открывает всплывающее окно с указанным URL (например, https://yoursite.ru/shoppilot-sso)
  3. Ваш сайт аутентифицирует пользователя (например, отображает форму логина/регистрации)
  4. Ваш сайт создает JWT токен, который содержит информацию о пользователе
  5. И делает редирект на URL https://app.shoppilot.ru/auth/sso/jwt/login?token=TOKEN&store_id=STORE_ID
  6. После этого всплывающее окно автоматически закроется (в ответе будет скрипт, который вызывает window.close()) и отзыв отправится в Shoppilot.

Все процессы происходят в браузере, прямого взаимодействия вашего сайта и платформы Shoppilot нет.

Как сформировать JWT токен читайте здесь.

Логаут

Чтобы разлогинить пользователя, нужно сформировать JWT токен аналогичным образом, но отправить его на https://app.shoppilot.ru/auth/sso/jwt/logout?token=TOKEN&store_id=STORE_ID.

Допустим, пользователь разлогинился на вашем сайте и вы хотите, чтобы Shoppilot также его разлогинил. Возможные варианты:

Логаут через редирект

После логаута на вашем сайте вы формируете токен, добавляя "return_to": "https://yoursite.ru" в payload, и делаете редирект на https://app.shoppilot.ru/auth/sso/jwt/logout?token=TOKEN&store_id=STORE_ID. Тогда пользователь разлогинится в Shoppilot и сразу будет отправлен на https://yoursite.ru.

Логаут через iframe

После логаута на вашем сайте вы формируете токен и создаете на странице скрытый фрейм <iframe src="https://app.shoppilot.ru/auth/sso/jwt/logout?token=TOKEN&store_id=STORE_ID".

Чтобы очистить форму отзыва и заставить скрипт Shoppilot «забыть» об уже загруженной сессии пользователя, достаточно закрыть Омнибокс:

var Omnibox = Shoppilot.require('omnibox');
Omnibox.close({force: true});

При следующем взаимодействии с формами Shoppilot устаревшей сессии уже не будет (пользователь будет анонимен).

Свой JS сценарий

По умолчанию, скрипт Shoppilot открывает SSO диалог в новом окне (window.open()). Если вам это не подходит, можно написать свой обработчик SSO, например, открывающий форму входа в модальном окне.

Обработчик — функция без аргументов, возвращающая Promise (then-able object). Скрипту Shoppilot нужно указать ваш обработчик одним из двух способов:

// Через команду
_shoppilot.push(['_setSSOHandler', function () { /* */ }]);

// Через JS API
Shoppilot.require('user_config').set('sso_handler', function () { /* */ });

В примере ниже минималистичный обработчик, который логинит пользователя по заранее сгенерированному JWT токену, используя скрытый iframe.

const TOKEN = 'YOUR_JWT';
const STORE_ID = 'YOUR_STORE_ID';
const BASE_SSO_URL = 'https://app.shoppilot.ru/auth/sso/jwt';

let addIframe = function (src) {
  let iframe = document.createElement('iframe');
  iframe.style = 'position:absolute;opacity:0;width:1px;height:1px;top:-1px;left:-1px;';
  iframe.src = src;
  document.body.appendChild(iframe);
};

let login = addIframe.bind(this, `${BASE_SSO_URL}/login?token=${TOKEN}&store_id=${STORE_ID}`);
let logout = addIframe.bind(this, `${BASE_SSO_URL}/logout?token=${TOKEN}&store_id=${STORE_ID}`);

let SSOHandler = function () {
  return new Promise(function (resolve, reject) {
    let Omnibox = Shoppilot.require('omnibox');
    Omnibox.hide();
    login();                  // Ваш сценарий
    setTimeout(function () {  // Таймаут для симуляции работы сценария
      Omnibox.show();
      resolve();
    }, 2000)
  });
};

Shoppilot.require('user_config').set('sso_handler', SSOHandler);

Авто-логин

Бывает так, что пользователь залогинен на сайте, но не залогинен в Shoppilot. В таком случае можно провести процедуру SSO невидимо для пользователя. Для этого используется метод JS API backgroundLogin.

Для включения SSO на стороне Shoppilot

  1. Перейти в раздел Настройки компании -> Омнибокс -> Аутентификация
  2. Разрешить запрашивать аутентификацию при написании отзыва
  3. Выбрать способ аутентификации Single Sign-On (SSO)
  4. Заполнить секретный ключ для подписи JWT токена
  5. Заполнить URL аутентификации на вашем сайте (см. шаг 2)

Настройки SSO в личном кабинете

results matching ""

    No results matching ""