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

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

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

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

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

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

    Для регистрации конфиденциального клиента с паролем (секретом) необходимо при выполнении командлета Add-DssClient необходимо указать параметр -GenerateSecret. В случае если был зарегистрирован публичный клиент (без секрета), возможно сделать его конфиденциальным. Для этого необходимо выполнить следующую команду:

    Set-DssClient -ClientId <string> -Type Confidential -GenerateSecret
    

    Изменить секрет существующего конфиденциального клиента возможно при помощи следующей команды:

    Set-DssClient -ClientId <string> -GenerateSecret
    

    Добавить еще один секрет для существующего конфиденциального клиента (например, другого типа или для другого варианта использования клиента) возможно при помощи следующей команды:

    # Секрет типа пароль
    Add-DssClientSecret -ClientId <string> -Type SharedSecret
    
    # Секрет типа сертификат
    Add-DssClientSecret -ClientId <string> -Type Certificate -Certificate <путь к файлу сертификата>
    

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

    • при помощи заголовка 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.

    В начало © ООО "КРИПТО-ПРО", 2000–2025