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

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

    Примечание

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

    Спецификация описана в разделе 4.1 RFC6749.

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

    image

    1. Запрос авторизации
    2. Авторизация пользователя
    3. Выдача кода авторизации
    4. Запрос маркера доступа
    5. Получение маркера доступа

    Запрос авторизации

    Для инициализации запроса на авторизацию клиентское приложение должно сформировать следующий запрос и отправить его на конечную точку /oauth/authorize:

    Пример

    GET https://{{hostname}}/{{stsappname}/oauth/authorize?client_id=sample&response_type=code&scope=dss&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob%3Aauto&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 - идентификатор ресурса, для доступа к которому выпускается токен. Для Сервиса Подписи идентификатор фиксирован и имеет вид urn:cryptopro:dss:signserver:<signserverAppName>.

    Аутентификация пользователя

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

    Выдача кода авторизации

    После успешной аутентификации ЦИ сформирует следующий ответ, который отправит на 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) или был передан некорретный redirect_uri.
    400 invalid_request Неверно сформирован параметр resource.
    500 An error has occurred Проверяющая сторона с идентификатором resource не зарегистрирована.

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

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

    POST https://<hostname>/<stsappname>/oauth/token HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    cache-control: no-cache
    Accept: */*
    content-length: 139
    
    grant_type=authorization_code&code=9e554074113426cb2f4430f51b68170a&redirect_uri=http%3A%2F%2Fgrand-pc%2FauthorizationCode&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) или был передан некорретный redirect_uri.
    400 invalid_request Неверно сформирован параметр resource.
    400 invalid_grant Невалидный код авторизации.
    500 An error has occurred Проверяющая сторона с идентификатором resource не зарегистрирована.

    Пример сообщения об ошибке

    HTTP/1.1 400 Bad Request
    Cache-Control: no-cache
    Pragma: no-cache
    Expires: -1
    Date: Fri, 21 Dec 2018 13:46:42 GMT
    Connection: close
    
    {"error":"invalid_client"}
    
    В начало © ООО "КРИПТО-ПРО", 2000–2025