Show / Hide Table of Contents

    Аутентификация через сторонние ЦИ

    СЭП КриптоПро DSS поддерживает аутентификацию в сторонних ЦИ по двум протоколам:

    1. WS-Federation (далее WsFed)
    2. OpenId Connect 1.0 (далее Oidc)

    Настройка доверия к стороннему ЦИ

    Настройка доверися к стороннему ЦИ осуществялется Администратором DSS через PowerShell с помощью следующих командлетов:

    • Add-DssIdentityProvider - добавление нового доверенного ЦИ.
    • Set-DssIdentityProvider - изменение параметров существующего доверенного ЦИ.
    • Get-DssIDentityProvider - отображение списка доверенных ЦИ.
    • Remove-DssIdentityProvider - удаление доверенного ЦИ из списка.
    • Disable-DssIdentityProvider - отключение довернного ЦИ.
    • Enable-DssIdentityProvider - включение доверенного ЦИ.
    • Set-DssIdentityProviderOidcEndpoint - изменение настроек аутентификации протокола Oidc.
    • Set-DssIdentityProviderWsDedEndpoint - изменение настроек аутентификации протокола WsFed.

    Настройка аутентификации по протоколу OpenId Connect 1.0

    Для подключения стороннего ЦИ по протоколу Oidc необходимы следующие данные:

    1. URL адрес конечной точки авторизации (AuthorizationEndpoint).
    2. URL адрес конечной точки распространения набора ключей (JwksUri).
    3. Самоназвание стороннего ЦИ (Issuer).
    4. Идентификатор клиента (ClientId).
    5. Секрет клиента (ClientSecret).
    6. Запрашиваемые области использования (Scopes).

    Использование Google в качестве стороннего ЦИ

    Для примера подключим в качестве стороннего ЦИ Google.

    Сначала необходимо зарегистрировать DSS, как Oauth-клиент в сервисе Google. Для этого требуется зайти в консоль разработчика Google и создать новый проект, нажав на кнопку Create Project:

    После создания проекта нужно включить API, к которому DSS в качестве OAuth 2.0 клиента будет запрашивать доступ. Таким API является Google+. Для включения API нужно нажать кнопку ENABLE APIS AND SERVICES

    и найти в поиске Google+ API

    Следующим шагом является добавление учётных данных клиента для доступа к API. Для добавления необходимо нажать на кнопку CREATE CREDENTIALS

    В появившемся мастере можно сразу перейти к настройке Client Id, нажав на ссылку client ID в первом пункте

    Прежде, чем ввести параметры OAuth клиента требуется задать данные, отображаемые на экране согласия (consent screen). На этом экране пользователю будет предложено предоставить доступ DSS к запрашиваемым данным при аутентификации. Обязательными для заполнения являются адрес электронной почты владельца DSS и отображаемое название сервиса.

    После указания данных для экрана согласия можно укзаать параметры сервиса для протокола OAuth. Из обязательных полей имя клиента (отображается в списке подключенных клиентов в консоли разработчика) и адрес перенаправления. Также необходимо указать тип клиента Web Application. Адрес перенаправления имеет вид https://<host>/<sts_appname>/Authentication/External.

    После создания клиента появится диалог, отображающий присвоенный client_id и client_secret, данный диалог можно игнорировать. Вместо этого удобно скачать параметры подключения в виде json-документа.

    Внутри JSON-документ содержит параметры OAuth клиента и адреса конечных точек, из которых интересует конечная точка авторизации (параметр auth_uri) https://accounts.google.com/o/oauth2/auth и URL для получения сертификатов подписи маркеров безопасности (параметр auth_provider_x509_cert_url) https://www.googleapis.com/oauth2/v1/certs.

    По ссылке auth_provider_x509_cert_url можно получить список сертификатов в формате BASE64. Их необходимо установить в хранилище Доверенные лица локального компьютера, а их отпечатки прописать в параметрах подключенного стороннего ЦИ.

    Однако следует отметить, что Google меняет свои сертификаты достаточно часто (примерно раз в 3 недели), поэтому можно настроить динамическое обновление ключей проверки маркеров. Для этого в параметрах ЦИ следует указать адрес распространения набора ключей подписи маркеров JwksUri, для Google этот адрес имеет значение https://www.googleapis.com/oauth2/v3/certs.

    Для проверки маркера КриптоПро DSS пытается найти сертификат ключа проверки среди зарегистрированных сертификатов, если это не удаётся сделать, из маркера извлекается "самоназвание" ЦИ (для Google это accounts.google.com) и по нему находится зарегистрированный ЦИ. Если в настройках ЦИ задан JwksUri, то DSS загрузит текущие ключи подписи и с помощью них осуществит проверку пришедшего маркера.

    У стороннего ЦИ можно попросить положить в выпускаемый маркер определённые утверждения, делается это через параметр Scope, в случае Google имеет смысл попросить добавить в маркер утверждение, содержащее адрес электронной почты (обратите внимание, что для Oidc протокола в Scope обязаетльно наличие значения openid).

    С учётом всего вышеизложенного команда по настройке аутентификации через Oidc примет вид:

    Set-DssIdentityProviderOidcEndpoint `
    -IssuerName google `
    -AuthorizationEndpoint https://accounts.google.com/o/oauth2/auth `
    -JwksUri https://www.googleapis.com/oauth2/v3/certs `
    -Issuer accounts.google.com `
    -ClientId 23459005498-m89eo2br5q92nooqongdnm98qs8e5e4n.apps.googleusercontent.com `
    -ClientSecret 1O2M4R6M8m9b9uF76XijOB `
    -Scopes "openid email"
    

    ЦИ КриптоПро DSS ожидает, что в маркере будет сожержаться определённый набор утверждений, но во многих случаях на срдержимое маркера, возврашаемого сторонним ЦИ, повлиять нельзядаже с помощью параметра Scopes. Лля решения этой проблемы можно использовать правила преобразования утверждений. Подробно они рассматриваются в разделе Правила преобразования утверждений. Для Google в качестве уникального идентификатора можно использовать email пользователя, а роль Users добавлять безусловно, тогда правила преобразования будут задаваться следующим образом:

    [
        { 
            "Name":"Pass through email",
            "Rules" : [
                "c:[type==\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress\"]=>issue(type=\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name\", value=c.value);",
                "=>issue(type=\"http://schemas.microsoft.com/ws/2008/06/identity/claims/role\", value=\"Users\");",
            ]
        }
    ]
    

    Настройка аутентификации по протоколу WS-Federation

    Для подключения стороннего ЦИ по протоколу WsFed необходимы URL адрес конечной точки для обработки пассивного сценария (WsFedEndpointUri).

    Настройка Microsoft ADFS в качестве стороннего ЦИ

    Для ADFS адрес WsFedEndpointUri имеет вид https://<adfs-host>/adfs/ls. Тогда команда по настройке ADFS в качестве стороннего ЦИ примет вид

    Set-DssIdentityProviderWsFedEndpoint -IssuerName ADFS -WsFedEndpointUri "https://<adfs-host>/adfs/ls"
    
    Back to top © ООО "КРИПТО-ПРО", 2000-2020