Show / Hide Table of Contents

    Аутентификация OAuth клиента

    ПАК КриптоПро DSS обладает возможностью регистрации конфиденциальных OAuth-клиентов. Под конфиденциальным клиентом понимается аутентифицируемые OAuth клиент, обладающий тем или иным фактором аутентификации. КриптоПро DSS позволяет аутентифицировать OAuth-клиенты следующим образом:

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

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

    Данная схема подразумевает наличие у OAuth-клиента пароля, знанием которого обладают только сервер аутентификации и собственно аутентифицируемый клиент.

    Для регистрации конфиденциального клиента с паролем необходимо при выполнении командлета Add-DssClient необходмо указать параметр GenerateSecret. Пароль также может быть добавлен позднее для уже существующих клиентов при помощи командлета Powershell Add-DssClientSecret с типом секрета SharedSecret.

    При формировании запросов к серверу аутентификации клиент может передавать свои аутентификационные данные двумя способами:

    • при помощи заголовка Authentication HTTP-запроса.
    • в теле HTTP-запроса;

    В первом случае для HTTP-запроса необходимо сформировать заголовок Authentication следующего вида:

    Basic dGVzdENsaWVudDp0ZXN0U2VjcmV0
    

    Идентификатор клиента и секрет преобразовываются следующим образом: Base64(client_id:secret), где Base64() это функция преобразования символьной строки в кодировку Base64.

    Пример: для OAuth-клиента с идентификатором testClient и секретом testSecret необходимо сделать следующее:

    1. Объединить идентификатор и секрет в строку с разделителем: testClient:testSecret;
    2. Преобразовать полученную строку с использованием кодировки Base64: Base64(testClient:testSecret)=dGVzdENsaWVudDp0ZXN0U2VjcmV0;
    3. Сформировать готовый заголовок: Authenctication: Basic dGVzdENsaWVudDp0ZXN0U2VjcmV0.

    Во втором случае идентификатор OAuth-клиента и секрет необходимо передавать в теле запроса на аутентификацию. Для идентификатора OAuth-клиента предназначен параметр client_id, для секрета - client_secret соответственно.

    Примечание

    В соответствии с RFC 6749, передача аутентификационных данных клиента в теле запроса должна использоваться только для клиентов, которые не могут в полной мере воспользоваться схемой аутентификации Basic HTTP. Для клиентов, которые обладают возможностью аутентификации через Basic HTTP СТРОГО НЕ РЕКОМЕНДУЕТСЯ передавать данные в теле запроса. Дополнительно следует отметить, что данные НИКОГДА не должны передаваться в строке запроса и должны влючаться ТОЛЬКО в тело.

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

    ПАК КриптоПро DSS поддерживает возможность аутентификации OAuth-клиента посредством установления двустороннего защищенного соединения между клиентом и сервером аутентификации. В качестве фактора аутентификации выступает клиентский сертификат, который используется OAuth-клиентом для установления защищенного соединения.

    ПАК предусматривает отдельную конечную точку oauth/token/cert для аутентификации OAuth-клиентов по клиентскому сертификату. Конечная точка настроена таким образом, что обязательно требует клиентский сертификат.

    Процедура аутентификации выглядит следующим образом:

    1. OAuth-клиент инициирует запрос на авторизацию на указанную выше конечную точку;
    2. Между сервером и OAuth-клиентом устанавливается двустороннее защищенное соединение;
    3. Сервер извлекает client_id из тела запроса для идентификации OAuth-клиента;
    4. Затем сервер извлекает клиентский сертификат установленного соединения и убеждается, что найденный на предыдущем этапе OAuth-клиент сдержит среди своих секретов извлеченный сертификат;
    5. В случае положительного результата сервер осуществляет дальнейшую аутентификацию пользователя на основании информации в теле запроса.

    Для того, чтобы зарегистрировать сертификат в качестве клиентского секрета, необходимо воспользоваться командлетом Powershell Add-DssClientSecret, указав в нем тип секрета Certificate, а сам сертификат в качестве значения параметра Certificate.

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