Авторизация пользователей через OAUTH2 в ЕСИА: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Как все работает)
(Как все работает)
Строка 72: Строка 72:
 
##[redirect_uri] => https://zapis.volmed.org.ru/esia/response.php (Может и не нужен)
 
##[redirect_uri] => https://zapis.volmed.org.ru/esia/response.php (Может и не нужен)
 
##[scope] => openid    - В доке написано, что scope дб такой же, как при авторизации ([http://minsvyaz.ru/uploaded/presentations/esiametodicheskierekomendatsii223.pdf тут] стр 135)
 
##[scope] => openid    - В доке написано, что scope дб такой же, как при авторизации ([http://minsvyaz.ru/uploaded/presentations/esiametodicheskierekomendatsii223.pdf тут] стр 135)
 +
##[timestamp] => 2017.07.01 11:15:40 +0300
 +
##[token_type] => Bearer
 +
##[refresh_token] => 5d77d9ac-5d55-494d-8a0c-1e5f021aa813
 +
#В ответ получаем маркер обновления, который можно использовать для продления сессии, когда данная сессия устареет
 +
#Вот далее пока не понятно. По идее мы должны послать запрос на получение маркера доступа (п.В.3.2 документации). Вот его структура
 +
##[client_id] => LPUV01355
 +
##[grant_type] => authorization_code
 +
##[client_secret] => MIIG1wYJKoZIhvcNAQc.......
 +
##[state] => 5d77d9ac-5d55-494d-8a0c-1e5f021aa813
 +
##[redirect_uri] => https://zapis.volmed.org.ru/esia/response.php
 +
##[scope] => fullname gender
 
##[timestamp] => 2017.07.01 11:15:40 +0300
 
##[timestamp] => 2017.07.01 11:15:40 +0300
 
##[token_type] => Bearer
 
##[token_type] => Bearer

Версия 11:45, 1 июля 2017

Буду писать основные моменты, когда получится все опишу подробно.
Описание всего этого дела лежит тут. Правда в нем уже куча ошибок. Обещают поправить в будущем.

Генерация ключа

создаем файл config.cfg

# Параметры для генерации открытого ключа.
[ req ]
# Секция основных опций
default_bits=2048
# Число бит
#default_keyfile=miac.pem
# Имя ключа, используемого для сертификата
distinguished_name=req_distinguished_name
# DN организации, выдавшей сертификат
prompt=no
# Брать параметры из конфига неинтерактивный режим
[ req_distinguished_name ]
# DN организации
CN=RU
# Страна
ST=Vologodskaya
# Область
L=Vologda
# Город
O=MIAC
# Название организации
OU=MIAC
# Название отделения
CN=volmed.org.ru
# Имя для сертификата (персоны, получающей сертификат)
emailAddress=miac35@mail.ru
# Мыло организации

Создаем файл генерации esia.sh. Сделал ключи без пароля.

openssl req  -x509 -sha256 -newkey rsa:2048 -nodes -days 3650 \
    -keyout miac_priv.pem \
    -out miac_root.pem \
    -config config.cfg

Запускаем его и получаем 2 файла сертификата.

$ sh esia.sh

Регистрация ИС

  1. Получаем ЭЦП на руководителя для входа на сайт ГУ
  2. Настраиваем комп для входа с этой ЭЦП. Учтите на данный момент при входе через FF, версия его дб , иначе не установится плагин для работы с ГУ.
  3. Входим на сайт ГУ.
  4. Регистрируем организацию.
  5. Регистрируем ИС. При этом загружаем сгенерированный файл сертификата miac_root.pem.

Создание заявки для подключения к тестовой версии ЕСИА

Делаем заявку для подключения к ЕСИА. Описание есть тут.

Как все работает

  1. Сначала делаем запрос на https://esia-portal1.test.gosuslugi.ru/aas/oauth2/ac на авторизацию . Более подробно можно посмотреть в документации. Единственно, scope дб openid. Это ссылка с GET параметрами.
    Структура запроса
    1. client_id=LPUV01355 - Выданный при регистрации ИС на сайте ГУ. Можно посмотреть тут
    2. client_secret=MIIG1wYJKoZI.........
    3. redirect_uri=https%3A%2F%2Fzapis.volmed.org.ru%2Fesia.php
    4. scope=openid
    5. response_type=code
    6. state=5f0fd916-2499-4719-8236-d895ac458979
    7. access_type=offline
    8. timestamp=2017.07.01+10%3A59%3A50+%2B0300
  2. В ответ получаем code авторизации.
  3. Используем данный code для запроса токена. Структура запроса
    1. [client_id] => LPUV01355
    2. [code] => Полученный при авторизации код
    3. [grant_type] => authorization_code
    4. [client_secret] => MIIG1wYJKoZIhvcNAQcCoIIGy.... формируется как и при авторизации
    5. [state] => 5d77d9ac-5d55-494d-8a0c-1e5f021aa813 снова формируется новый
    6. [redirect_uri] => https://zapis.volmed.org.ru/esia/response.php (Может и не нужен)
    7. [scope] => openid - В доке написано, что scope дб такой же, как при авторизации (тут стр 135)
    8. [timestamp] => 2017.07.01 11:15:40 +0300
    9. [token_type] => Bearer
    10. [refresh_token] => 5d77d9ac-5d55-494d-8a0c-1e5f021aa813
  4. В ответ получаем маркер обновления, который можно использовать для продления сессии, когда данная сессия устареет
  5. Вот далее пока не понятно. По идее мы должны послать запрос на получение маркера доступа (п.В.3.2 документации). Вот его структура
    1. [client_id] => LPUV01355
    2. [grant_type] => authorization_code
    3. [client_secret] => MIIG1wYJKoZIhvcNAQc.......
    4. [state] => 5d77d9ac-5d55-494d-8a0c-1e5f021aa813
    5. [redirect_uri] => https://zapis.volmed.org.ru/esia/response.php
    6. [scope] => fullname gender
    7. [timestamp] => 2017.07.01 11:15:40 +0300
    8. [token_type] => Bearer
    9. [refresh_token] => 5d77d9ac-5d55-494d-8a0c-1e5f021aa813

Использую Class