OIDC, SAML и внешние поставщики идентификации#
Сервис OIDC Discovery#
Blitz Identity Provider автоматически публикует сервис OIDC
Discovery в соответствии с
заданными в Blitz Identity Provider настройками. В составе сервиса можно
прописать адрес документации на OIDC сервис. Чтобы задать свой адрес
документации, необходимо в блоке настроек blitz.prod.local.idp.oauth
прописать настройку serviceDocumentationUrl
со значением адреса
ссылки на документацию.
Адреса вызовов внешних поставщиков#
При внедрении Blitz Identity Provider может возникнуть потребность
настроить вызовы с серверов Blitz Identity Provider обработчиков внешних
поставщиков идентификации не напрямую, а через прокси сервер. В этом
случае есть необходимость изменить стандартные адреса обработчиков
внешних поставщиков идентификации на адреса, зарегистрированные на
прокси сервере. Чтобы скорректировать адреса обработчиков, необходимо
изменить значения настроек authUri
, tokenUri
, dataUri
в
соответствующих блоках настроек внешних поставщиков идентификации в
blitz.prod.local.idp.federation
.
Пример настроек для входа через внешний поставщик Google:
"federation" : {
"points" : {
"google" : [
{
…
"authUri" : "https://accounts.google.com/o/oauth2/auth",
"tokenUri" : "https://accounts.google.com/o/oauth2/token",
"dataUri" : "https://www.googleapis.com/oauth2/v1/userinfo?alt=json",
…
},
…
]
}
}
Внешний SAML-поставщик#
Blitz Identity Provider позволяет настроить вход через внешний поставщик идентификации, работающий по протоколу SAML 2.0.
Для этого необходимо в блоке настроек
blitz.prod.local.idp.federations
создать внешний поставщик saml
со следующими настройками:
name
– системное имя внешнего поставщика идентификации;humanReadableName
– описание внешнего поставщика идентификации;clientId
– имя поставщика услуг (EntityId
), присвоенное Blitz Identity Provider при регистрации во внешнем SAML поставщике идентификации;signAuthnReq
– определяет, должен ли Blitz Identity Provider подписывать SAML запрос, отправляемый внешнему поставщику идентификации;checkAssertionSign
– определяет, необходимо ли проверять подпись SAML утверждений, полученных от внешнего поставщика идентификации (для ПРОД сред обязательно необходимо включать проверку подписи);блок
credentials
с настройками доступа к ключевому контейнеру, используемому для подписывания запросов к поставщику идентификации SAML. Настраивается опционально, в случае если для взаимодействия с внешним поставщиком идентификации требуется использовать отдельный контейнер ключей. Если настройка не задана, то ключи будут браться из основного keystore, настроенного в блокеblitz.prod.local.idp.keystore
(при этом в качествеalias
будет использоваться имя поставщика идентификации из настройки name).Задаются настройки:
alias
– имя ключа в контейнере;keystore
– блок настроек, содержащий тип контейнера (type
), который может быть JCEKS или BKS, а также путь к контейнеру (path
) и пароль к контейнеру (password
);
idpMetaPath
– путь к файлу, в котором хранятся метаданные внешнего поставщика идентификации (XML-файл с метаданными IDP);блок настроек
userMatching
– задает правила сопоставления учетных записей:в настройке
type
– признак, что используется базовая (значениеbuilder
) настройка связывания учетных записей;в настройке
mapping
– правила сопоставления учетных записей из внешнего SAML-поставщика идентификации учетным записям в Blitz Identity Provider;в настройке
matchingRules
– правила переноса SAML-утверждений из внешнего поставщика идентификации в атрибуты учетной записи в Blitz Identity Provider;requireLogInToBind
– признак «Предлагать пользователю ввести логин и пароль для привязки, если учетная запись не была идентифицирована»;strictMatching
– признак «Требовать ввод пароля, если учетная запись была идентифицирована»;uniqueMatching
– признак «Для привязки должна быть найдена только одна учетная запись по заданным правилам соответствия».
Пример настроек внешнего поставщика идентификации:
"federation" : {
"points" : {
"saml" : [
{
"name" : "demo-idp",
"humanReadableName" : "External SAML IDP",
"clientId" : "login.company.com",
"signAuthnReq" : true,
"checkAssertionSign" : true,
"_credentials" : {
"alias" : "demo-idp",
"keyStore" : {
"password" : "*****",
"path" : "demo-idp-key.jks",
"type" : "JCEKS"
}
},
"idpMetaPath" : "demo-idp-metadata.xml",
"userMatching" : {
"type" : "builder",
"mapping" : [
{
"attr" : "urn:saml:mail",
"master" : false,
"value" : "${email}"
}
],
"matchingRules" : [
[
{
"attr" : "urn:saml:mail",
"value" : "${email}"
}
]
],
"requireLogInToBind" : false,
"strictMatching" : false,
"uniqueMatching" : false
}
}
],
…
}
}
После создания настроек внешнего поставщика необходимо включить его в
списке доступных внешних поставщиков идентификации. Для этого в блок
настроек blitz.prod.local.idp.login
в перечень методов
аутентификации (methods
) в список внешних поставщиков входа
externalIdps
добавить внешний поставщик c fedPoint
,
соответствующий настроенному.
Пример настройки для включения внешнего поставщика идентификации с типом
saml
и именем demo-idp
:
"login" : {
…
"methods" : {
…
"externalIdps" : {
"idps" : [
…
{
"fedPoint" : "saml:demo-idp"
},
…
],
…
},
…
},
…
}
Настроить логотип для кнопки входа через внешний поставщик входа.
Внешний поставщик СУДИС#
Blitz Identity Provider позволяет настроить вход через внешний поставщик идентификации СУДИС.
Для этого необходимо в блоке настроек blitz.prod.local.idp.federations
создать внешний поставщик sudis
со следующими настройками:
name
– системное имя внешнего поставщика идентификации;humanReadableName
– описание внешнего поставщика идентификации;clientId
– имя поставщика услуг (EntityId
), присвоенное Blitz Identity Provider при регистрации в СУДИС;блок
credentials
с настройками доступа к ключевому контейнеру, используемому для подписывания и шифрования запросов к СУДИС. Должно использоваться ПО CMSServer, дистрибутив которого предоставляет поставщик СУДИС.Задаются настройки:
endpoint
– адрес сервера CMSServer;fingerprint
– SHA1 хэш сертификата IDP СУДИС. Указывается в формате{SHA1}значение
;recipientKey
– идентификатор ключа СУДИС (значениеcn
изsubject
сертификата СУДИС);senderKey
– идентификатор ключа Blitz Identity Provider, используемого для подписания запросов к СУДИС и расшифровывания ответов (значениеcn
изsubject
сертификата Blitz Identity Provider, зарегистрированного в СУДИС);
idpEntityId
–EntityID
СУДИС;sidAttrName
– имя атрибута, используемого в качестве идентификатора учетной записи в СУДИС;ssoServiceLocation
– адрес обработчика запроса запросов на аутентификацию в СУДИС;sloServiceResponseLocation
– адрес ответа на запросы логаута, инициированные в СУДИР из СУДИС;sloServiceLocation
– адрес обработчика логаута в СУДИС при инициировании логаута из СУДИР в СУДИС;блок настроек
userMatching
– задает правила сопоставления учетных записей:в настройке
type
– признак, что используется базовая (значениеbuilder
) настройка связывания учетных записей;в настройке
mapping
– правила сопоставления учетных записей из внешнего SAML-поставщика идентификации учетным записям в Blitz Identity Provider;в настройке
matchingRules
– правила переноса SAML-утверждений из внешнего поставщика идентификации в атрибуты учетной записи в Blitz Identity Provider;requireLogInToBind
– признак «Предлагать пользователю ввести логин и пароль для привязки, если учетная запись не была идентифицирована»;strictMatching
– признак «Требовать ввод пароля, если учетная запись была идентифицирована»;uniqueMatching
– признак «Для привязки должна быть найдена только одна учетная запись по заданным правилам соответствия».
Пример настроек внешнего поставщика идентификации:
"federation" : {
"points" : {
"sudis" : [
{
"clientId" : "<ENTITY_ID BLITZ>",
"credentials" : {
"endpoint" : "http://<CMS_HOST>:<CMS_PORT>",
"fingerprint" : "{SHA1}<FINGERPRINT SUDIS CERT>",
"recipientKey" : "<SUDIS_KEY SUBJECT.CN>",
"senderKey" : "<BLITZ_KEY SUBJECT.CN>"
},
"humanReadableName" : "SUDIS",
"idpEntityId" : "http://…",
"name" : "sudis",
"sidAttrName" : "oid",
"ssoServiceLocation" : "http://…/idp/profile/SAML2/POSTGOST/SSO",
"sloServiceLocation" : "http://…/idp/Logout",
"sloServiceResponseLocation" : "http://…/idp/profile/SAML2/Redirect/SLO",
"userMatching" : {
…
}
}
],
После создания настроек внешнего поставщика необходимо включить его в списке доступных внешних поставщиков идентификации. Для этого в блок настроек blitz.prod.local.idp.login
в перечень методов аутентификации (methods
) в список внешних поставщиков входа externalIdps
добавить внешний поставщик c fedPoint
, соответствующий настроенному.
Пример настройки для включения внешнего поставщика идентификации с типом sudis
и именем sudis
:
"login" : {
…
"methods" : {
…
"externalIdps" : {
"idps" : [
…
{
"fedPoint" : "sudis:sudis"
},
…
],
…
},
…
},
…
}