Аутентификация

Аутентификация предполагает проверку подлинности номера телефона, введённого пользователем. Проверка происходит через push-уведомление, которое оператор поднимает на устройстве пользователя через обращение к SIM-карте. Если проверка по push не удалась, будет произведена попытка аутентифицировать пользователя с помощью СМС.

Особенности подключения / интеграции

  • Услуга предоставляется по схеме Server Initiated (SI), при которой пользователь остаётся на ресурсе сервис-провайдера, и всё взаимодействие с оператором производит сервис-провайдер.
  • Сервис-провайдеру необходимо опубликовать криптографические ключи (подробнее о JWKS).

Как выглядит процесс для пользователя?

  1. На площадке сервис-провайдера пользователь вводит номер телефона.
  2. Пользователь получает sim-push либо СМС с кодом для подтверждения входа.
  3. Пользователь подтверждает вход.

Как выглядит процесс для сервис-провайдера?

Аутентификация

  1. На площадке Сервис-провайдера Пользователь вводит номер телефона.

Аутентификация

  1. Сервис-провайдер направляет Мобильному ID запрос на аутентификацию Пользователя.

Подробнее про si-authorize

На что обратить внимание:

  • параметр “scope” для данного кейса должен содержать два значения: “openid” и “mc_authn”;
  • значение для параметра “request” требует предварительной подготовки (см. описание si-authorize).

Пример запроса на аутентификацию:

POST https://idgw.mobileid.mts.ru/oidc/si-authorize

Content-Type: application/json

{
"client_id": "b27c101b-727d-4316-a2b2-8901f0821194",
"response_type": "mc_si_async_code",
"scope": "openid mc_authn",
"request": "eyJ0eXAiOiUzI1pZJzYTEifQ...gWw",
"correlation_id":"5c16bec6-5d61-4931-9adf-d7f4f723bc97"
}
  1. Мобильный ID запрашивает у Сервис-провайдера публичный ключ с меткой sig, чтобы проверить подпись под значением параметра request из запроса на авторизацию. Подробнее о криптографических ключах

Пример ключа (sig):

{
"kty":"RSA",
"e":"AQAB",
"use":"sig",
"kid":"zno_K2w2J28A0CGPciEDDfMcCgd2JK5x779hAgmmUgc",
"alg":"RS256",
"n":"k_cWneEqkYOcMgec5H2yhw6C-MQa_BIUnlgUVa8...0Lw"
}

4-5. Мобильный ID проверяет подпись и отправляет Сервис-провайдеру ответ об успешной валидации запроса на аутентификацию.

Пример ответа:

HTTP/1.1 200 OK

Content-Type: application/json

{
"auth_req_id":"020ce831-a6cb-495b-b78e-b39753ae9d79",
"expires_in":140,
"correlation_id":"5c16bec6-5d61-4931-9adf-d7f4f723bc97"
}
  1. Мобильный ID отправляет Пользователю push с запросом на подтверждение входа на площадку Сервис-провайдера.

Аутентификация

  1. Пользователь подтверждает вход на площадку.

  2. Если push не может быть доставлен Пользователю, Мобильный ID получает сообщение об ошибке и может инициировать отправку СМС с кодом (шаги 9-15).

  3. Мобильный ID отправляет Пользователю СМС.

Аутентификация

  1. Мобильный ID отправляет Сервис-провайдеру нотификацию на sms_otp_notification_endpoint.

Подробнее про smsotp-notification

Пример smsotp-notification:

POST {SMS_OTP_NOTIFICATION_ENDPOINT}
Authorization:bearer {client_notification_token}

{

"auth_req_id": "020ce831-a6cb-495b-b78e-b39753ae9d79",
"smsotp_endpoint":{sms_otp_enpoint},
"correlation_id": "5c16bec6-5d61-4931-9adf-d7f4f723bc97",
"send":
{
"verify_code": "enter_otp_code"
}
}
  1. Сервис-провайдер отвечает “200 ОК”.

  2. Сервис-провайдер запрашивает у Пользователя код.

Аутентификация

  1. На площадке Сервис-провайдера Пользователь вводит код из СМС.

  2. Сервис-провайдер передаёт код Мобильному ID.

Подробнее про smsotp-notification

Пример запроса на проверку кода:

POST {smsotp_endpoint}
Content-Type: application/json

{
"verify_code" : "8492"
}
  1. Мобильный ID отвечает “200 ОК”.

  2. Мобильный ID направляет Сервис-провайдеру нотификацию с id_token.

Подробнее про notification

На что обратить внимание:

  • значение параметра “id_token” всегда имеет формат JSON Web Token (JWT), поэтому, чтобы получить данные, его необходимо декодировать (подробнее про ID Token).

Пример нотификации при успешной аутентификации:

POST https://service-provider.io/notification_uri/

Authorization: bearer 53f4f85c-4fca-454e-92f5-3996e46f246c
Content-Type: application/json

{
"auth_req_id": "020ce831-a6cb-495b-b78e-b39753ae9d79",
"access_token": "6346d40e-a15d-497a-992d-f3273c113ab9",
"token_type": "Bearer",
"id_token": "eyJ0eXAiOiJKV1QiLbGciOiJIUzI1Ni...J9",
"expires_in": 3600,
"correlation_id": "5c16bec6-5d61-4931-9adf-d7f4f723bc97"
}
  1. Сервис-провайдер запрашивает у Мобильного ID публичный ключ с меткой sig.

Публичный ключ сервиса опубликован по ссылке – https://idgw.mobileid.mts.ru/oidc/jwks

18-19. Сервис-провайдер с помощью полученного ключа проверяет подпись под значением параметра id_token и отвечает “204 No content”.

Подробнее про ID Token

  1. Сервис-провайдер обрабатывает id_token – извлекает sub и связывает его с профилем пользователя на своей площадке.

Пример sub из id_token:

"sub": "873d1a98-23ef-42be-a14c-f577674fd349"
  1. Сервис-провайдер авторизует Пользователя на своей площадке.