Show / Hide Table of Contents

    Режимы возврата ответа о результате авторизации

    В OAuth 2.0 сценариях использования с кодом авторизации (AuthorizationCode) и с неявным разрешением (Implicit Flow) возврат ответа может осуществляться различными способами. В СЭП КриптоПро DSS поддерживаются три:

    1. Возврат результата в строке запроса (query).
    2. Возврат результата во фрагменте URL-адреса (fragment).
    3. Возврат резуьтата через отправку HTML-форы (form_post).

    В скобках приведены значения параметра response_mode запроса на авторизацию, который необходимо указать для того, чтобы сервер вернул ответ в соответствующем режиме.

    Возврат результата в строке запроса

    При использовании данного метода сервис авторизации возвращает HTTP ответ со статусом 302 Found, в заголовкe Location указывается redirect_uri, переданный в запросе на авторизацию, все параметры ответа помещаются в строку запроса (query string).

    Если в запросе на авторизацию явно не указан режим возврата ответа, то по умолчанию используется данный режим.

    Пример 1

    GET /STS/oauth/authorize?
    client_id=eea2fd3f-5c70-4d74-a594-f1e7bf81b4d7
    &resource=https%3A%2F%2Fdss.cryptopro.ru%2FSignServer%2Frest%2Fapi
    &redirect_uri=http%3A%2F%2F127.0.0.1%3A9158%2F
    &response_type=code HTTP/1.1
    
    HTTP/1.1 302 Found
    Cache-Control: no-cache
    Pragma: no-cache
    Expires: -1
    Location: http://127.0.0.1:9158/?code=399c0f1dfc694f34f9d10ce7c5bc28a8
    Content-Length: 0
    

    Значения параметров кодируются с помощью кодировки application/x-www-form-urlencoded (см. RFC-6749).

    Возврат результата в URL-фрагменте

    Данный метод совпадает с предыдущим за исключением того, что параметры возвращаются в URL-фрагменте:

    Пример 2

    GET /STS/oauth/authorize?
    client_id=eea2fd3f-5c70-4d74-a594-f1e7bf81b4d7
    &resource=https:%2f%2fdss.cryptopro.ru%2fSignServer%2frest%2fapi
    &redirect_uri=http:%2f%2f127.0.0.1:9158%2f
    &response_type=token&response_mode=fragment HTTP/1.1
    
    HTTP/1.1 302 Found
    Cache-Control: no-cache
    Pragma: no-cache
    Expires: -1
    Location: http://127.0.0.1:9158/#access_token=eyJ0e&token_type=Bearer&expires_in=300
    Content-Length: 0
    

    Возврат результата через отправку HTML формы

    Данный режим подходит для возврата результата в том случае, когда значения параметров представляют собой длинные строки, так как часто браузеры и ОС накладывают ограничения на длину заголовков HTTP ответа, в том числе и заголовка Location.

    В данном режиме сервис авторизации в ответ на запрос авторизации возвращает HTML страницу, содержащую HTML форму и JavaScript, который автоматически отправляет данную форму после загрузки страницы. Параметр action данной формы (т.е. адрес, куда она будет отправлена) устанавливается равным значению redirect_uri из запроса на авторизацию. Сама форма содержит поля (элементы html input элементы), соответствующие параметрам ответа.

    Пример 3

    GET /STS/oauth/authorize?
    client_id=eea2fd3f-5c70-4d74-a594-f1e7bf81b4d7
    &resource=https:%2f%2fdss.cryptopro.ru%2fSignServer%2frest%2fapi
    &redirect_uri=http:%2f%2f127.0.0.1:9158%2f
    &response_type=token
    &response_mode=form_post HTTP/1.1
    
    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Length: 2818
    Content-Type: text/html
    Expires: -1
    Date: Wed, 15 Aug 2018 07:37:56 GMT
    
    <!DOCTYPE html><html><head><title>Submit this form</title><meta name='viewport' content='width=device-width, initial-scale=1.0' /></head>
    <body><form method='post' action='http://127.0.0.1:9158/'>
    <input type="hidden" name="access_token" value="eyJ0eXAi" />
    <input type="hidden" name="token_type" value="Bearer" />
    <input type="hidden" name="expires_in" value="300" />
    </form><script>(function(){document.forms[0].submit();})();</script></body></html>
    

    Возврат ошибок

    Так как ошибки авторизации возвращаются как параметры ответа, для них используются те же режимы.

    Пример 4

    GET /STS/oauth/authorize?
    client_id=eea2fd3f-5c70-4d74-a594-f1e7bf81b4d7
    &resource=https:%2f%2fdss.cryptopro.ru%2fSignServer%2frest%2fapi
    &redirect_uri=ru.cryptopro.dss:%2f%2foauth2redirect%2fcloudcsp
    &response_type=token
    &response_mode=form_post HTTP/1.1
    
    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Length: 358
    Content-Type: text/html
    Expires: -1
    Date: Wed, 15 Aug 2018 07:45:58 GMT
    
    <!DOCTYPE html><html><head><title>Submit this form</title><meta name='viewport' content='width=device-width, initial-scale=1.0' /></head><body>
    <form method='post' action='ru.cryptopro.dss://oauth2redirect/cloudcsp'>
    <input type="hidden" name="error" value="login_required" />
    </form><script>(function(){document.forms[0].submit();})();</script></body></html>
    

    Наличие ошибки можно определить по существованию параметра error, дополнительно в ответе может содержаться параметр error_description, содержащий более подробное описание ошибки.

    Back to top © ООО "КРИПТО-ПРО", 2000-2020