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

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Как все работает)
(Как все работает)
Строка 54: Строка 54:
 
Делаем заявку для подключения к ЕСИА. Описание есть [http://minsvyaz.ru/ru/documents/4244/ тут].<br>
 
Делаем заявку для подключения к ЕСИА. Описание есть [http://minsvyaz.ru/ru/documents/4244/ тут].<br>
 
==Как все работает==
 
==Как все работает==
# Сначала делаем запрос на https://esia-portal1.test.gosuslugi.ru/aas/oauth2/ac на авторизацию . Более подробно можно посмотреть в документации. Единственно, scope дб openid.  Это ссылка с GET параметрами.<br>Структура запроса
+
# Сначала делаем запрос на https://esia-portal1.test.gosuslugi.ru/aas/oauth2/ac на авторизацию . Более подробно можно посмотреть в документации. Единственно, scope дб openid.  Это ссылка с GET параметрами (В.2.2).<br>Структура запроса
 
##client_id=LPUV01355 - Выданный при регистрации ИС на сайте ГУ. Можно посмотреть [https://esia.gosuslugi.ru/console/tech/ тут]
 
##client_id=LPUV01355 - Выданный при регистрации ИС на сайте ГУ. Можно посмотреть [https://esia.gosuslugi.ru/console/tech/ тут]
 
##client_secret=MIIG1wYJKoZI.........
 
##client_secret=MIIG1wYJKoZI.........
Строка 64: Строка 64:
 
##timestamp=2017.07.01+10%3A59%3A50+%2B0300
 
##timestamp=2017.07.01+10%3A59%3A50+%2B0300
 
#В ответ получаем code авторизации.
 
#В ответ получаем code авторизации.
#Используем данный code для запроса токена. Структура запроса  
+
#Используем данный code для запроса токена (п. В.2.3 Получение маркера доступа в обмен на авторизационный код). Структура запроса  
 
##[client_id] => LPUV01355
 
##[client_id] => LPUV01355
 
##[code] => Полученный при авторизации код  
 
##[code] => Полученный при авторизации код  
Строка 77: Строка 77:
 
#В ответ получаем маркер обновления, который можно использовать для продления сессии, когда данная сессия устареет
 
#В ответ получаем маркер обновления, который можно использовать для продления сессии, когда данная сессия устареет
 
#Вот далее пока не понятно. По идее мы должны послать запрос на получение маркера доступа (п.В.3.2 документации). Вот его структура
 
#Вот далее пока не понятно. По идее мы должны послать запрос на получение маркера доступа (п.В.3.2 документации). Вот его структура
##[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
 
##[token_type] => Bearer
 
##[token_type] => Bearer
##[client_secret] => MIIG1wYJK...............
+
##[client_secret] => MIIG1wYJK............... генерится как обычно
 
На этом пока все. Буду дописывать, по мере продвижения.
 
На этом пока все. Буду дописывать, по мере продвижения.
  
 
Использую [https://github.com/fr05t1k/esia Class]<br>
 
Использую [https://github.com/fr05t1k/esia Class]<br>

Версия 11:56, 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 для запроса токена (п. В.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 документации). Вот его структура
    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