Типовые конфигурации
Сценарий А: Поиск по userPrincipalName, идентификатор — objectSid
Самый распространённый и рекомендуемый вариант для среды с Active Directory. Keycloak передаёт UPN пользователя, поиск ведётся по нему, итоговый идентификатор — стабильный SID.
Токен Keycloak:
{
"email": "ivanov@company.ru"
}
appsettings.json:
"OpenId": {
"UserIdClaim": "email",
"UserNameClaim": "name"
},
"Ldap": {
"UserFilter": "(&(objectCategory=person)(objectClass=user)(userPrincipalName={UserIdClaimValue}))",
"UserMatchAttribute": "objectSid",
"UserMatchAttributeIsStringValue": false
}
Вид UserID в Business Studio: S-1-5-21…
Сценарий Б: Поиск по sAMAccountName, идентификатор — строковый атрибут
Используется, если Keycloak передаёт короткое имя пользователя (логин домена), а не полный UPN.
Токен Keycloak:
{
"preferred_username": "ivanov"
}
appsettings.json:
"OpenId": {
"UserIdClaim": "preferred_username",
"UserNameClaim": "name"
},
"Ldap": {
"UserFilter": "(&(objectCategory=person)(objectClass=user)(sAMAccountName={UserIdClaimValue}))",
"UserMatchAttribute": "objectSid",
"UserMatchAttributeIsStringValue": false
}
Вид UserID в Business Studio: S-1-5-21…
Примечание: при таком сценарии важно убедиться, что preferred_username в Keycloak содержит именно sAMAccountName, а не полный email. Это настраивается в маппере токена на стороне Keycloak.
Сценарий В: Поиск по objectSid, пришедшему напрямую из токена
Используется в продвинутых конфигурациях, где Keycloak настроен на передачу SID через пользовательский атрибут. В инструкции по типовому развертыванию (см. Настройка файла appsettings.json) в качестве примера описывается именно такой вариант как пример фильтра по умолчанию.
Токен Keycloak:
{
"sid": "S-1-5-21..."
}
appsettings.json:
"OpenId": {
"UserIdClaim": "sid"
},
"Ldap": {
"UserFilter": "(&(objectCategory=person)(objectClass=user)(objectSid={UserIdClaimValue}))",
"UserMatchAttribute": "objectSid",
"UserMatchAttributeIsStringValue": false
}
В этом случае входное значение фильтра и итоговый UserID — один и тот же SID. LDAP-поиск служит лишь для верификации существования пользователя в Active Directory.
Вид UserID в Business Studio: S-1-5-21…
Соответствие между сценариями и значениями в UsersEditions / ServerAdministratorsIds
В разделе UsersEditions в качестве UserId нужно указывать именно то значение, которое становится UserID после LDAP-поиска — то есть значение атрибута UserMatchAttribute.
"UsersEditions": [
{
"UserId": "S-1-5-21-...",
"Edition": "Professional"
}
]
Если UserMatchAttribute — строковый атрибут (например, mail), то в UserId нужно указать именно email.
Ниже приведена таблица сравнения трех основных сценариев настройки:
| Параметр | Сценарий А: userPrincipalName | Сценарий Б: sAMAccountName | Сценарий В: objectSid |
|---|---|---|---|
| UserIdClaim | "email" | "preferred_username" | "sid" |
| Значение в токене | "ivanov@company.ru" | "ivanov" | "S-1-5-21-…" |
| Фильтр LDAP | userPrincipalName=… | sAMAccountName=… | objectSid=… |
| UserMatchAttribute | objectSid | objectSid | objectSid |
| UserID в системе | S-1-5-21-… | S-1-5-21-… | S-1-5-21-… |