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

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Как все работает)
(Как все работает)
Строка 64: Строка 64:
 
##timestamp=2017.07.01+10%3A59%3A50+%2B0300
 
##timestamp=2017.07.01+10%3A59%3A50+%2B0300
 
#В ответ получаем code авторизации.
 
#В ответ получаем code авторизации.
#Используем данный code для запроса токена (п. В.2.3 Получение маркера доступа в обмен на авторизационный код). Структура запроса  
+
#Используем данный code для запроса токена. Запрос на адрес https://esia-portal1.test.gosuslugi.ru/aas/oauth2/te  (п. В.2.3 Получение маркера доступа в обмен на авторизационный код). Структура запроса  
 
##[client_id] => LPUV01355
 
##[client_id] => LPUV01355
 
##[code] => Полученный при авторизации код  
 
##[code] => Полученный при авторизации код  
Строка 76: Строка 76:
 
##[refresh_token] => 5d77d9ac-5d55-494d-8a0c-1e5f021aa813
 
##[refresh_token] => 5d77d9ac-5d55-494d-8a0c-1e5f021aa813
 
#В ответ получаем маркер обновления, который можно использовать для продления сессии, когда данная сессия устареет
 
#В ответ получаем маркер обновления, который можно использовать для продления сессии, когда данная сессия устареет
#Вот далее пока не понятно. По идее мы должны послать запрос на получение маркера доступа (п.В.3.2 документации). Вот его структура
+
#Вот далее пока не понятно. По идее мы должны послать запрос на получение маркера доступа (п.В.3.2 документации). Запрос на адрес https://esia-portal1.test.gosuslugi.ru/aas/oauth2/te Вот его структура
 
##[client_id] => LPUV01355  мнемоника ИС
 
##[client_id] => LPUV01355  мнемоника ИС
 
##[response_type] => token
 
##[response_type] => token
 
##[grant_type] => client_credentials
 
##[grant_type] => client_credentials
##[scope] => fullname gender    то что ьыхотим получить с сайта ГУ
+
##[scope] => fullname gender    то что мы хотим получить с сайта ГУ
 
##[state] => a4947434-f9ac-4267-b83b-7e4036998898  генерится новый
 
##[state] => a4947434-f9ac-4267-b83b-7e4036998898  генерится новый
 
##[timestamp] => 2017.07.01 11:47:14 +0300
 
##[timestamp] => 2017.07.01 11:47:14 +0300

Версия 11:58, 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 параметрами (В.2.2).
    Структура запроса
    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 для запроса токена. Запрос на адрес https://esia-portal1.test.gosuslugi.ru/aas/oauth2/te (п. В.2.3 Получение маркера доступа в обмен на авторизационный код). Структура запроса
    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 документации). Запрос на адрес https://esia-portal1.test.gosuslugi.ru/aas/oauth2/te Вот его структура
    1. [client_id] => LPUV01355 мнемоника ИС
    2. [response_type] => token
    3. [grant_type] => client_credentials
    4. [scope] => fullname gender то что мы хотим получить с сайта ГУ
    5. [state] => a4947434-f9ac-4267-b83b-7e4036998898 генерится новый
    6. [timestamp] => 2017.07.01 11:47:14 +0300
    7. [token_type] => Bearer
    8. [client_secret] => MIIG1wYJK............... генерится как обычно

На этом пока все. Буду дописывать, по мере продвижения.

Использую Class