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

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Регистрация ИС)
(Как все работает)
Строка 63: Строка 63:
 
##access_type=offline
 
##access_type=offline
 
##timestamp=2017.07.01+10%3A59%3A50+%2B0300
 
##timestamp=2017.07.01+10%3A59%3A50+%2B0300
 +
#В ответ получаем code авторизации.
 +
#Используем данный code для запроса токена. Структура запроса
 +
##[client_id] => LPUV01355
 +
##[code] => Полученный при авторизации код
 +
##[grant_type] => authorization_code
 +
##[client_secret] => MIIG1wYJKoZIhvcNAQcCoIIGy.... формируется как и при авторизации   
 +
##[state] => 5d77d9ac-5d55-494d-8a0c-1e5f021aa813  снова формируется новый
 +
##[redirect_uri] => https://zapis.volmed.org.ru/esia/response.php (Может и не нужен)
 +
##[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
  
 
Использую [https://github.com/fr05t1k/esia Class]<br>
 
Использую [https://github.com/fr05t1k/esia Class]<br>

Версия 11:34, 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

Использую Class