Перейти к основному содержимому

OpenID Connect / OAuth

OpenID Connect (OIDC) — протокол аутентификации и получения информации о пользователе из внешней системы. Протокол обратно совместим с OAuth, разница заключается в том, что OpenID Connect используется для аутентификации, а OAuth для авторизации.

С помощью Мультифактора можно подключить двухфакторную аутентификацию и контроль доступа пользователей в ваше приложение по любому из данных протоколов.

Поскольку Мультифактор не запрашивает и не хранит пароли ваших пользователей, первым фактором аутентификации (логин и пароль), в зависимости от настройки, могут быть:

  • Google
  • Yandex
  • Active Directory (локальная)
  • Azure AD
  • любой другой поставщик учетных записей

Схема работы

  1. Ваше приложение создает запрос доступа и отправляет пользователя на страницу Мультифактора.
  2. Мультифактор переадресует пользователя на страницу поставщика учетных записей.
  3. После подтверждения первого фактора, Мультифактор запрашивает второй фактор аутентификации и возвращает пользователя в ваше приложение с результатом.

Конфигурация OpenID Connect

Конфигурация для подключения вашего приложения к Мультифактору по протоколу OIDC или OAuth доступна по ссылке https://api.multifactor.ru/.well-known/openid-configuration.

Настройка Мультифактора

Зайдите в систему управления Мультифактором, далее в раздел "Ресурсы" и создайте новое OAuth / OpenID приложение. После создания вам будут доступны два параметра: Client ID и Client Secret, они потребуются для интеграции.

Процесс интеграции

  1. Вы отправляете пользователя на адрес
https://idp.multifactor.ru/oidc?response_type=code&client_id=client_id&redirect_uri=redirect_uri&scope=openid&state=state

где

  • client_id — параметр из настроек ресурса;
  • redirect_uri — адрес возврата в ваше приложение (должен быть указан в настройках ресурса);
  • state — произвольное значение для отслеживания запроса на ваше стороне.
  1. После аутентификации Мультифактор возвращает пользователя на адрес
redirect_uri?code=auth_code&state=state

где

  • redirect_uri — адрес вашего приложения из первого запроса;
  • auth_code — код авторизации;
  • state — значение из первого запроса.
  1. Ваш сервер делает запрос к нам на адрес
POST https://api.multifactor.ru/openid/token
grant_type=authorization_code&
code=auth_code&
redirect_uri=redirect_uri&
client_id=client_id&
client_secret=client_secret

где

  • auth_code — параметр из второго запроса;
  • redirect_uri — адрес вашего приложения из первого запроса;
  • client_id — из настроек ресурса;
  • client_secret — аналогично.

Параметры передаются в теле запроса с указанием
Content-Type: application/x-www-form-urlencoded.

  1. В ответ наш сервер возвращает токен авторизации, срок действия, токен пользователя и ассоциированное с ним случайное значение
{
"token_type": "Bearer",
"access_token":"access_token",
"expires_in":3600,
"id_token": "id_token",
"scope": "openid",
"nonce": "nonce"
}

где

  • access_token — токен доступа;
  • expires_in — срок действия в секундах;
  • id_token — информация о пользователе, закодированная в формате JWT;
  • nonce — случайное значение, используемое для привязки клиентского сеанса к токену.

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

  1. Для получения информации о пользователе ваш сервер делает запрос к нам на адрес
GET https://api.multifactor.ru/openid/userinfo

С авторизацией Authorization: Bearer access_token

где

  • access_token — токен доступа из запроса 4.
  1. В ответ наш сервер возвращает информацию о пользователе в формате JSON
{
"iss": "https://access.multifactor.ru", //кто выдал токен
"aud": "rs_1a913e4ea690ac12ea163331dd60d", //кому выдан (client_id)
"sub": "user@example.com", //имя пользователя
"iat": 1571684399, //когда выдан
"exp": 1571684699, //срок действия
"name": "Name Surname", //имя пользователя указанное при регистрации в Multifactor (приоритетнее) или внешней системе
"email": "user@example.com" //email адрес пользователя
}