Аутентификация через сторонние ЦИ
СЭП КриптоПро DSS поддерживает аутентификацию в сторонних ЦИ по двум протоколам:
Настройка доверия к стороннему ЦИ
Настройка доверися к стороннему ЦИ осуществялется Администратором 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 необходимы следующие данные:
- URL адрес конечной точки авторизации (AuthorizationEndpoint).
- URL адрес конечной точки распространения набора ключей (JwksUri).
- Самоназвание стороннего ЦИ (Issuer).
- Идентификатор клиента (ClientId).
- Секрет клиента (ClientSecret).
- Запрашиваемые области использования (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"