iis-info
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| iis-info [2020/07/06 09:58] – [PKCE] admin1 | iis-info [2023/11/13 08:46] (текущий) – admin1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| // | // | ||
| - | ====== Протокол работы ЕСИА ====== | + | ====== Протокол работы ЕСИ ====== |
| //Все запросы в данном руководстве разделены построчно для удобства чтения.// | //Все запросы в данном руководстве разделены построчно для удобства чтения.// | ||
| - | Данный документ описывает конфигурацию работы ЕСИА. | + | Данный документ описывает конфигурацию работы ЕСИ. |
| ====== Discovery document ====== | ====== Discovery document ====== | ||
| - | Discovery document – это документ в формате JSON, показывающий информацию об ЕСИА - адреса Endpoint’ов, | + | Discovery document – это документ в формате JSON, показывающий информацию об ЕСИ - адреса Endpoint’ов, |
| Его можно найти по адресу: | Его можно найти по адресу: | ||
| - | https:// | + | https:// |
| Содержит следующие поля: | Содержит следующие поля: | ||
| - | * **issuer** – URL идентификатор ЕСИА. ЕСИА использует его для сравнения с полем **iss** в **ID Token**’е. | + | * **issuer** – URL идентификатор ЕСИ. ЕСИ использует его для сравнения с полем **iss** в **ID Token**’е. |
| - | * **jwks_uri** – URL JWK документа. Содержит ключи, которые клиенты должны использовать при проверке подписей ЕСИА. | + | * **jwks_uri** – URL JWK документа. Содержит ключи, которые клиенты должны использовать при проверке подписей ЕСИ. |
| * **authorization_endpoint** – URL адрес Authorization Endpoint’а. | * **authorization_endpoint** – URL адрес Authorization Endpoint’а. | ||
| * **token_endpoint** – URL адрес Token Endpoint’а. | * **token_endpoint** – URL адрес Token Endpoint’а. | ||
| Строка 23: | Строка 23: | ||
| * **revocation_endpoint** - endpoint отзыва **Access Token**' | * **revocation_endpoint** - endpoint отзыва **Access Token**' | ||
| - | * **scopes_supported** – JSON массив, | + | * **scopes_supported** – JSON массив, |
| * **openid** – обязательный scope для всех запросов. Означает, | * **openid** – обязательный scope для всех запросов. Означает, | ||
| * **profile** – включает в себя: | * **profile** – включает в себя: | ||
| Строка 37: | Строка 37: | ||
| * **phone** – включает в себя **phone** и **phone_verified**. | * **phone** – включает в себя **phone** и **phone_verified**. | ||
| * **offline_access** – нужно ли получение Refresh Token' | * **offline_access** – нужно ли получение Refresh Token' | ||
| - | * **organizations** - ИНН организаций | + | * **device_api** - доступ к API для мобильного приложения. |
| + | * **IdentityServerAPI** - обязательный параметр для доступа к ЕСИ посредствам API (Обязателен для мобильных приложений, | ||
| + | * **PEP_disable** - позволяет отключить вход через обычную электронную подпись клиенту. | ||
| + | * **signature_api** - доступ к подписанию. | ||
| + | * **TouchIdApi** - доступ к API для верификации человека по отпечатку пальца. | ||
| + | * **FaceIdApi** - доступ к API для верификации человека по лицу. | ||
| + | * **PersonalCabinetApi** - доступ к API личного кабинета мобильному приложению. | ||
| + | * **oepRegister** - доступ к API для удаленного получения ОЭП. | ||
| + | * **pki_srs_kg_create_user** - API необходимое для создание и синхронизированния пользователей. | ||
| + | * **organization_tin** – ИНН | ||
| + | * **position_name** – должность пользователя в юридическом | ||
| + | * **QRdisable** - значение отключает возможность авторизации в системе через QR-код (при включенной функции не отображается вкладка «QR» в ЕСИ) | ||
| + | * **CdsOtpApi** - доступ к api для получения otp с ОЭП | ||
| + | * **IisUserInfo** - доступ к информации о пользователе еси api | ||
| - | * **response_types_supported** – JSON массив, | + | * **response_types_supported** – JSON массив, |
| * **response_modes_supported** – JSON массив, | * **response_modes_supported** – JSON массив, | ||
| - | * **claims_supported** – JSON массив, | + | * **claims_supported** – JSON массив, |
| - | * **sub** – идентификатор пользователя ЕСИА. | + | * **sub** – идентификатор пользователя ЕСИ. |
| * **pin** – персональный номер. | * **pin** – персональный номер. | ||
| * **family_name** – Фамилия. | * **family_name** – Фамилия. | ||
| Строка 56: | Строка 69: | ||
| * **phone_number** – мобильный телефон в формате **E164**. | * **phone_number** – мобильный телефон в формате **E164**. | ||
| * **phone_number_verified** – подтвержден ли телефон (true/ | * **phone_number_verified** – подтвержден ли телефон (true/ | ||
| - | * **organizations** - массив, | + | * **organization_tin** – ИНН юридического |
| + | * **position_name** – должность пользователя в юридическом лице, указанного в organization_tin. | ||
| Строка 62: | Строка 76: | ||
| ====== ID Token ====== | ====== ID Token ====== | ||
| - | Для аутентификации пользователя OpenID Connect вводит понятие **ID Token**’а. Это структура данных, | + | Для аутентификации пользователя OpenID Connect вводит понятие **ID Token**’а. Это структура данных, |
| - | ЕСИА выдаёт **ID Token** со следующими полями: | + | ЕСИ выдаёт **ID Token** со следующими полями: |
| - | * **iss** – (Issuer) идентификатор ЕСИА. Это регистрозависимый URL, использующий https, содержащий схему и хост. Может содержать номер порта, путь. Не содержит параметров запроса. | + | * **iss** – (Issuer) идентификатор ЕСИ. Это регистрозависимый URL, использующий https, содержащий схему и хост. Может содержать номер порта, путь. Не содержит параметров запроса. |
| - | * **sub** – (Subject) идентификатор пользователя. Уникальный, | + | * **sub** – (Subject) идентификатор пользователя. Уникальный, |
| * **aud** – (Audience) массив строк, содержащий идентификаторы клиентов (client_id), | * **aud** – (Audience) массив строк, содержащий идентификаторы клиентов (client_id), | ||
| * **exp** – (Expiration) срок действия **ID Token**' | * **exp** – (Expiration) срок действия **ID Token**' | ||
| Строка 71: | Строка 85: | ||
| * **auth_time** – (Authentication time) время, когда была произведена аутентификация пользователя. Значение представляется в виде JSON числа, показывающий количество секунд прошедших с 1970-01-01T0: | * **auth_time** – (Authentication time) время, когда была произведена аутентификация пользователя. Значение представляется в виде JSON числа, показывающий количество секунд прошедших с 1970-01-01T0: | ||
| * **nonce** – регистрозависимая строка, | * **nonce** – регистрозависимая строка, | ||
| - | * **amr** – (Authentication methods references) JSON массив строк, хранящий методы аутентификации, | + | * **amr** – (Authentication methods references) JSON массив строк, хранящий методы аутентификации, |
| * **at_hash** – хэш Access Token’а. Хэш вычисляется по левой половине хэшей октетов Access Token“a в формате ASCII. Примененный хэш-алгоритм указан в головной части (header) **ID Token**’a в значении '' | * **at_hash** – хэш Access Token’а. Хэш вычисляется по левой половине хэшей октетов Access Token“a в формате ASCII. Примененный хэш-алгоритм указан в головной части (header) **ID Token**’a в значении '' | ||
| Строка 77: | Строка 91: | ||
| ====== Authentication request ====== | ====== Authentication request ====== | ||
| - | Authentication request (Запрос на аутентификацию) — это GET или POST запрос клиента в Authorization Endpoint, который требует, | + | **Authentication request** (Запрос на аутентификацию) — это GET или POST запрос клиента в Authorization Endpoint, который требует, |
| В случае GET запроса, | В случае GET запроса, | ||
| Строка 84: | Строка 98: | ||
| * **scope** (Обязательный) – разделенные пробелом значения, | * **scope** (Обязательный) – разделенные пробелом значения, | ||
| - | * **response_type** (Обязательный) – определяет способ процесса авторизации. В случае с ЕСИА используется значение '' | + | * **response_type** (Обязательный) – определяет способ процесса авторизации. В случае с ЕСИ используется значение '' |
| - | * **client_id** (Обязательный) – идентификатор клиента, | + | * **client_id** (Обязательный) – идентификатор клиента, |
| - | * **redirect_uri** (Обязательный) – URI, куда будет отправлен ответ ЕСИА после того, как пользователь пройдёт аутентификацию в ЕСИА. Он задаётся вместе с '' | + | * **redirect_uri** (Обязательный) – URI, куда будет отправлен ответ ЕСИ после того, как пользователь пройдёт аутентификацию в ЕСИ. Он задаётся вместе с '' |
| * **nonce** (Опциональный) – регистрозависимая строка ассоциирующая сессию клиента с **ID Token**’ом, | * **nonce** (Опциональный) – регистрозависимая строка ассоциирующая сессию клиента с **ID Token**’ом, | ||
| * **state** (Опциональный) – значение для сохраниния состояние между запросом и callback’ом. Обычно для борьбы с CSRF это значение криптографически привязывается к куки браузера. | * **state** (Опциональный) – значение для сохраниния состояние между запросом и callback’ом. Обычно для борьбы с CSRF это значение криптографически привязывается к куки браузера. | ||
| Строка 93: | Строка 107: | ||
| ===== PKCE ===== | ===== PKCE ===== | ||
| - | Так как ЕСИА использует **Authorization Code flow with PKCE** ([[https:// | + | Так как ЕСИ использует **Authorization Code flow with PKCE** ([[https:// |
| - | * Сформировать **code verifier** - криптографически случайная строка размером от 43 до 128 символов, | + | |
| - | * Сформировать **code_challenge** следующим образом: | + | * Сформировать **code_challenge** следующим образом: |
| base64url(sha256(code_verifier)) | base64url(sha256(code_verifier)) | ||
| + | |||
| + | * Добавить в запрос следующие параметры: | ||
| - | * Добавить в запрос следующий параметр: | + | & |
| code_challenge_method=S256 | code_challenge_method=S256 | ||
| ===== Валидация запроса ===== | ===== Валидация запроса ===== | ||
| - | При получении запроса на аутентификацию ЕСИА проверит, | + | При получении запроса на аутентификацию ЕСИ проверит, |
| - | В случае, | + | В случае, |
| Возможны следующие параметры: | Возможны следующие параметры: | ||
| Строка 112: | Строка 127: | ||
| * **invalid_request** – неправильный запрос. Возникает, | * **invalid_request** – неправильный запрос. Возникает, | ||
| * **unauthorized_client** – неавторизованный клиент. Клиент не авторизован и не может получить авторизационный код. | * **unauthorized_client** – неавторизованный клиент. Клиент не авторизован и не может получить авторизационный код. | ||
| - | * **access_denied** – отказано в доступе. Пользователь либо ЕСИА отколнили запрос. | + | * **access_denied** – отказано в доступе. Пользователь либо ЕСИ отколнили запрос. |
| - | * **unsupported_response_type** – неподдерживаемый возвращаемый тип. ЕСИА не поддерживает получение авторизационного кода указанным методом. | + | * **unsupported_response_type** – неподдерживаемый возвращаемый тип. ЕСИ не поддерживает получение авторизационного кода указанным методом. |
| * **invalid_scope** – неправильный scope. Запрашиваемое(-ые) значения scope неверны, | * **invalid_scope** – неправильный scope. Запрашиваемое(-ые) значения scope неверны, | ||
| - | * **server_error** – ошибка сервера. Ошибка со стороны ЕСИА, которая не позволяет обработать запрос. | + | * **server_error** – ошибка сервера. Ошибка со стороны ЕСИ, которая не позволяет обработать запрос. |
| - | * **temporarily_unavailable** – временно недоступно. В данный момент ЕСИА не может обработать запрос из-за перегрузки либо технических работах на сервере. | + | * **temporarily_unavailable** – временно недоступно. В данный момент ЕСИ не может обработать запрос из-за перегрузки либо технических работах на сервере. |
| * **invalid_request_uri** – неправильный **redirect_uri**. **redirect_uri** возвращает ошибку при перенаправлении либо содержит неправильные данные. | * **invalid_request_uri** – неправильный **redirect_uri**. **redirect_uri** возвращает ошибку при перенаправлении либо содержит неправильные данные. | ||
| - | * **error_description** (Опциональный) – описание ошибки. Описание ошибки понятное человеку. | + | * **error_description** (Опциональный) – описание ошибки понятное человеку. |
| - | * **error_uri** (Опциональный) – URI ошибки. | + | * **error_uri** (Опциональный) – URI веб-страницы, |
| * **state** (Опциональный) – состояние согласно OAuth 2.0. Ставится значение, | * **state** (Опциональный) – состояние согласно OAuth 2.0. Ставится значение, | ||
| Строка 130: | Строка 145: | ||
| Пример ответа клиента, | Пример ответа клиента, | ||
| - | | + | 302 Found |
| - | Location: https:// | + | Location: https:// |
| response_type=code | response_type=code | ||
| & | & | ||
| & | & | ||
| & | & | ||
| - | & | + | & |
| + | & | ||
| + | & | ||
| - | Пример запроса, | + | Пример запроса, |
| - | GET https:// | + | GET https:// |
| response_type=code | response_type=code | ||
| & | & | ||
| & | & | ||
| & | & | ||
| - | & | + | & |
| + | & | ||
| + | & | ||
| Строка 156: | Строка 175: | ||
| & | & | ||
| - | Пример ответа ЕСИА при успешной валидации запроса на аутентификацию: | + | Пример ответа ЕСИ при успешной валидации запроса на аутентификацию: |
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | ||
| Строка 166: | Строка 185: | ||
| - | Для получения ID Token’а и Access Token’а клиент должен отправить POST запрос в Token Endpoint ЕСИА, предоставив полученный авторизационный код (**code**), свой **client_id**, | + | Для получения ID Token’а и Access Token’а клиент должен отправить POST запрос в Token Endpoint ЕСИ, предоставив полученный авторизационный код (**code**), свой **client_id**, |
| **client_id** и **client_secret** должны находится в заголовке запроса **Authorization** типа **Basic** в качестве имени пользователя и пароля соответственно. | **client_id** и **client_secret** должны находится в заголовке запроса **Authorization** типа **Basic** в качестве имени пользователя и пароля соответственно. | ||
| Строка 174: | Строка 193: | ||
| & | & | ||
| & | & | ||
| + | & | ||
| ===== Пример запроса к Token Endpoint ===== | ===== Пример запроса к Token Endpoint ===== | ||
| - | POST https:// | + | POST https:// |
| Content-Type: | Content-Type: | ||
| Authorization: | Authorization: | ||
| | | ||
| grant_type=authorization_code& | grant_type=authorization_code& | ||
| - | & | + | & |
| + | & | ||
| ===== Валидация запроса ===== | ===== Валидация запроса ===== | ||
| - | ЕСИА валидирует запрос следующим образом: | + | ЕСИ валидирует запрос следующим образом: |
| - Аутентифицирует клиента по полученным **client_id** и **client_secret**. | - Аутентифицирует клиента по полученным **client_id** и **client_secret**. | ||
| - Проверит авторизационный код. Действительно ли он был выдан данному клиенту. Правильный ли он, не был ли он использован до этого, был ли выдан в результате запроса на аутентификацию. | - Проверит авторизационный код. Действительно ли он был выдан данному клиенту. Правильный ли он, не был ли он использован до этого, был ли выдан в результате запроса на аутентификацию. | ||
| - Сравнит полученный **redirect_uri** со значением **redirect_uri** полученном при запроса на аутентификацию. | - Сравнит полученный **redirect_uri** со значением **redirect_uri** полученном при запроса на аутентификацию. | ||
| + | - Сформирует **code_challenge** из полученнго **code_verifier** и сравнит с ранее полученным **code_challenge** при запросе на аутентификацию. | ||
| - | При успешной валидации ЕСИА вернёт **Id Token** и **Access Token** в ответ в формате '' | + | При успешной валидации ЕСИ вернёт **Id Token** и **Access Token** в ответ в формате '' |
| * **token_type** – по стандарту всегда имеет значение '' | * **token_type** – по стандарту всегда имеет значение '' | ||
| * **refresh_token** – токен, позволяющий получить новый access token после того, как он истёк. Выдаётся в случае, | * **refresh_token** – токен, позволяющий получить новый access token после того, как он истёк. Выдаётся в случае, | ||
| Строка 201: | Строка 223: | ||
| При возникновении ошибки, | При возникновении ошибки, | ||
| - | Пример успешного ответа ЕСИА с **ID Token**' | + | Пример успешного ответа ЕСИ с **ID Token**' |
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | ||
| Строка 225: | Строка 247: | ||
| Пример запроса: | Пример запроса: | ||
| - | GET https:// | + | GET https:// |
| Host: server.example.com | Host: server.example.com | ||
| Authorization: | Authorization: | ||
| | | ||
| | | ||
| - | Ответ от ЕСИА: | + | Ответ от ЕСИ: |
| + | Если пользователь заходит как физическое лицо: | ||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | ||
| Content-type: | Content-type: | ||
| Строка 248: | Строка 271: | ||
| " | " | ||
| " | " | ||
| + | } | ||
| + | |||
| + | Если пользователь заходит как юридическое лицо: | ||
| + | HTTP/1.1 200 OK | ||
| + | Content-Type: | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| } | } | ||
iis-info.1594029486.txt.gz · Последнее изменение: — admin1
