Показать/Скрыть содержание

    Авторизация с аутентификацией по сертификату с использованием кода авторизации

    Примечание

    Данный сценарий не требует интерактивного взаимодействия Пользователя с Веб-интерфейсом ЦИ.

    Примечание

    Для аутентификации по сертификату в URL-адресе запроса следует использовать HTTPS-порт, для которого на веб-сервере настроено требование TLS-соединения с двусторонней аутентификацией.

    Для получения доступа к функциям СЭП посредством протокола OAuth с типом разрешения Authorization Code необходимо выполнить следующие шаги:

    1. Формирование запроса на код авторизации
    2. Получение кода авторизации
    3. Получение маркера доступа

    Формирование запроса на код авторизации

    Пример запроса

    GET https://{{hostname}}/{{stsappname}/oauth/authorize/certificate?client_id=sample&response_type=code&scope=dss&redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto&resource=urn:cryptopro:dss:signserver:signserver
    accept-encoding: gzip, deflate
    Connection: close
    

    Параметры запроса:

    • client_id - идентификатор клиента OAuth, зарегистрированный на ЦИ. Для регистрации клиента и его последующей конфигурации можно воспользоваться командлетами Windows PowerShell Add-IdsClient и Set-IdsClient соответственно.
    Примечание

    При регистрации клиента параметр AllowedFlow должен иметь значение AuthorizationCode.

    • response_type - в данном сценарии имеет значение code.
    • scope - области использования маркера. Должен содержать значение dss.
    • redirect_uri - зарегистрированный на Центре Идентификации адрес возврата (по этому адресу будет возвращен запрошенный код авторизации).
    Примечание

    Значение параметра должно соответствовать значению адреса возврата, заданного при регистрации клиента на ЦИ.

    Для случаев, в которых не планируется использование выделенного HTTP-сервиса для обработки URI перенаправления, рекомендуется использовать зарезервированный URI urn:ietf:wg:oauth:2.0:oob:auto.

    • resource - идентификатор ресурса, для доступа к которому выпускается токен.

    Также необходимо указать пользовательский сертификат в качестве клиентского SSL/TLS сертификата, именно по нему будет осуществляться поиск и аутентификация пользователя на ЦИ.

    Примечание

    В случае, если Центр Идентификации не сможет извлечь клиентский сертификат из запроса и корректно аутентифицировать пользователя, Пользователю будет предложена интерактивная аутентификация в Веб-Интерфейсе ЦИ.

    Для запрета интерактивного взаимодействия с Веб-Интерфейсом ЦИ необходимо передать в запросе дополнительный параметр prompt=none. В этом случае при невозможности аутентификации пользователя по сертификату ЦИ вернет ошибку.

    Получение кода авторизации

    В случае, если пользователь был успешно аутентифицирован с использованием предоставленного сертификата, ЦИ сформирует следующий ответ и отправит его на redirect_uri:

    HTTP/1.1 302 Found
    Location: urn:ietf:wg:oauth:2.0:oob:auto#code=c86322fd3a4cf85fb51249ab3fb4fcd1
    Content-Length: 0
    

    Параметр code (стоящий после символа #) содержит код авторизации, который необходимо извлечь из заголовка Location.

    Типовые ошибки

    HTTP-код Ошибка Описание
    400 invalid_client OAuth-клиент не зарегистрирован или неверно указан clientID
    400 unauthorized_client OAuth-клиент использует незарегистрированный сценарий аутентификации (Flow)
    400 invalid_request Неверно сформирован параметр resource
    500 An error has occurred Проверяющая сторона с идентификатором resource не зарегистрирована.

    Получение маркера доступа

    Для получения маркера доступа используется конечная точка /token. Клиент формирует следующий HTTP-запрос:

    POST https://<hostname>/<stsappname>/oauth/token HTTP/1.1
    cache-control: no-cache
    
    grant_type=authorization_code&code=e1b74adb33d77c51bf0f9121b8b88662&redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto&client_id=sample
    

    Параметры запроса:

    • grant_type - в данном сценарии имеет значение authorization_code.
    • code - код авторизации, полученный на предыдущем этапе.
    • redirect_uri - зарегистрированный на Центре Идентификации адрес возврата (по этому адресу будет возвращен запрошенный код авторизации).
    Примечание

    Значение параметра должно соответствовать значению адреса возврата, заданного при регистрации клиента на ЦИ.

    • client_id - идентификатор клиента OAuth, зарегистрированный на ЦИ.

    Если в рамках сценария необходима аутентификация клиентского приложени и известен его секрет, запрос необходимо модифицировать.

    Параметр client_id в теле запроса должен был заменен на заголовок Auhtorization HTTP-запроса, имеющий значение Basic Base64(client_id:client_secret).

    В случае успешной обработки запроса Центром Идентификации ответ будет содержать:

    • access_token - Маркер доступа, выпущенный Центром Идентификации
    • token_type - Тип токена
    • expires_in - Время жизни токена в секундах

    Значение параметра access_token необходимо будет использовать при обращениях к Сервису Подписи.

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Length: 2268
    Content-Type: application/json; charset=utf-8
    Expires: -1
    
    {"access_token":"eyJ0eXAiOiJKV1Q ... LnS1sAunDSE1hh3A5n8W7lhPSM4z_VA","expires_in":300,"token_type":"Bearer"}
    
    HTTP-код Ошибка Описание
    400 invalid_client OAuth-клиент не зарегистрирован или неверно указан clientID
    400 unauthorized_client OAuth-клиент использует незарегистрированный сценарий аутентификации (Flow)
    400 invalid_request Неверно сформирован параметр resource
    400 invalid_grant Невалидный код авторизации.
    500 An error has occurred Проверяющая сторона с идентификатором resource не зарегистрирована.
    В начало © ООО "КРИПТО-ПРО", 2000–2025