OpenID Connect / OAuth
OpenID Connect (OIDC) — протокол аутентификации и получения информации о пользователе из внешней системы. Протокол обратно совместим с OAuth, разница заключается в том, что OpenID Connect используется для аутентификации, а OAuth для авторизации.
С помощью Мультифактора можно подключить двухфакторную аутентификацию и контроль доступа пользователей в ваше приложение по любому из данных протоколов.
Поскольку Мультифактор не запрашивает и не хранит пароли ваших пользователей, первым фактором аутентификации (логин и пароль), в зависимости от настройки, могут быть:
Google
Yandex
Active Directory (локальная)
Azure AD
любой другой поставщик учетных записей
Схема работы
- В аше приложение создает запрос доступа и отправляет пользователя на страницу Мультифактора.
- Мультифактор переадресует пользователя на страницу поставщика учетных записей.
- После подтверждения первого фактора, Мультифактор запрашивает второй фактор аутентификации и возвращает пользователя в ваше приложение с результатом.
Конфигурация OpenID Connect
Конфигурация для подключения вашего приложения к Мультифактору по протоколу OIDC или OAuth доступна по ссылке https://api.multifactor.ru/.well-known/openid-configuration.
Настройка Мультифактора
Зайдите в систему управления Мультифактором, далее в разд ел "Ресурсы" и создайте новое OAuth / OpenID приложение. После создания вам будут доступны два параметра: Client ID и Client Secret, они потребуются для интеграции.
Процесс интеграции
- Вы отправляете пользователя на адрес
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 — произвольное значение для отслеживания запроса на ваше стороне.
- После аутентификации Мультифактор возвращает пользователя на адрес
redirect_uri?code=auth_code&state=state
где
- redirect_uri — адрес вашего приложения из первого запроса;
- auth_code — код авторизации;
- state — значение из первого запроса.
- Ваш сервер делает запрос к нам на адрес
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.
- В ответ наш сервер возвращает токен авторизации, срок действия, токен пользователя и ассоциированное с ним случайное значение
{
"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 — случайное значение, используемое для привязки клиентского сеанса к токену.
Вы можете раскодировать и проверить токен пользователя и на этом завершить процесс аутентификации, либо перейти к следующему шагу.
- Для получения информации о пользователе ваш сервер делает запрос к нам на адрес
GET https://api.multifactor.ru/openid/userinfo
С авторизацией Authorization: Bearer access_token
где
- access_token — токен доступа из запроса 4.
- В ответ наш сервер возвращает информацию о пользователе в формате 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 адрес пользователя
}