Единый вход с использованием JWT

iSpring Online позволяет использовать JWT (JSON Web Token) для реализации единого входа. JWT – это открытый стандарт для передачи пакетов между сторонами в веб-среде. Он используется для шифрования и передачи данных авторизованных пользователей между поставщиком идентификации (ваш корпоративный веб-сайт) и поставщиком услуг (iSpring Online).

Для настройки нужно

  • Навыки веб-разработки (PHP, JavaScript, JSON, JWT).

  • Доступ к вашему хостингу с правами администратора.

  • Аккаунт iSpring Online с доступом администратора.

Для авторизации пользователя на iSpring Online, сообщение JWT должно содержать уникальный идентификатор пользователя, также являющийся электронной почтой. Пароль и другая информация не требуется для осуществления единого входа.

JSON Web Token передается в iSpring Online как GET-параметр.

Например, полная ссылка, содержащая JWT-сообщение будет выглядеть так:
https://yourcompany.ispringonline.ru/sso/login/jwt?jwt=XXXXXX.YYYYYY.ZZZ

Составляющие части JWT

JWT Токен передается в зашифрованном виде и состоит из трёх частей, разделенных точками:

  1. XXXXXX закодированный заголовок

Заголовок представляет собой base64-код, который содержит информацию о типе стандарта ("JWT") и об алгоритме шифрования ("HS256").

{
 "Тип": "JWT",
 "ALG":
"HS256"}

  1. YYYYYY тело токена

Тело токена, также называемое “полезный груз” или payload содержит идентификатор пользователя (электронная почта). Он также представлен в формате base64-кода.

{
  "IAT": 123456789,
  "JTI": f4as6d5f4as6d54fasd6df4,
  "ехр": 123456849,
 "электронная почта":
"username@yourcompany.com"}

IAT (Issued At) - содержит время создания токена;
JTI (JWT ID) - идентификатор маркера, выдается автоматически, закодирован;
ехр - время истечения этого токена;
email - адрес электронной почты пользователя (или идентификатор пользователя)который требуется для проверки подлинности.

  1. ZZZ цифровая подпись

Эта часть содержит ключ для шифрования всего токена (все 3 части) и выглядит следующим образом:

HMACSHA256(base64UrlEncode(XXXXXX) + "." + base64UrlEncode(YYYYYY), secret)

secret - это ключ шифрования, который используется обеими сторонами для кодирования сообщений.

Настройка параметров JWT для единого входа в СДО

Настройка JWT в аккаунте iSpring Online достаточно проста.

  1. Войдите в свой аккаунт iSpring Online под учётной записью администратора и введите путь к настройкам в строке браузера:  https://yourcompany.ispringonline.ru/settings/sso/jwt

  2. Поставьте галочку в поле Enable JWT login for this account.

  3. Укажите Security key. Это значение также является криптографическим ключом и секретной частью частью JWT токена.

  4. Identity provider URL содержит адрес страницы вашего сайта, на котором располагается скрипт для генерации JWT токенов для входа пользователя.

  5. Logout URL содержит адрес страницы вашего сайта, на котором располагается скрипт для генерации JWT токенов для выхода пользователя.

Мы рекомендуем использовать протокол HTTPS вместо HTTP для повышения безопасности.

Примечание: при необходимости можно использовать GET параметр no_jwt=1 для удалённого отключения JWT опции: https://yourcompany.ispringonline.ru/login?no_jwt=1

Параметр no_jw1=0 включит опцию заново.

Логика единого входа JWT

Весь процесс показан на временной UML-диаграме ниже:

На этапе проверки пользователя, если его нет в базе iSpring Online, он будет автоматически добавлен и залогинен.

Единственным препятствием автоматического добавления нового пользователя может быть только лимит пользователей для текущего плана СДО.

Другим пример автоматической авторизации может быть тот случай, если пользователь сразу зашел на сайт iSpring Online, без предварительной авторизации на вашем сайте. Если в аккаунте Online включена опция JWT, то пользователь будет автоматически перенаправлен на соответствующую страницу вашего сайта (поставщика идентификации) https://www.yourwebsite.com/login-token/. После ввода логина и пароля на стороне вашего сайта, пользователь сможет беспрепятственно войти на портал Online.

Примеры реализации на PHP

Аутентификация (вход)

Данный cерверный скрипт должен быть размещён на вашем сайте. Возможные случаи и результаты:

  1. Если пользователь авторизован на вашем сайте, система перенаправляет этого пользователя в СДО iSpring Online.

  2. Если не авторизован, то пользователю предлагается ввести логин и пароль к вашему сайту. В случае успеха пользователь будет залогинен в СДО iSpring Online.

Бесплатный пример на GitHub: authentication.php

Запрос на выход

Этот скрипт тоже должен быть размещён на вашем сайте. В данном примере система проверяет подлинность email пользователя и осуществляет его выход из системы.

Бесплатный пример на GitHub: logout.php

Ссылки на англоязычные ресурсы по JWT:

  1. Introduction to JSON Web Tokens

  2. Anatomy of a JWT request

  3. JWT Debugger

  4. Libraries for Token Signing/Verification

  5. http://www.base64decode.org/