Примеры конфигурации для OpenLDAP в DataLens On-premises
Конфигурация провайдера OpenLDAP
const ldapConfig = {
slug: 'openldap',
title: 'OpenLDAP',
type: 'ldap',
defaultRole: 'datalens.visitor',
config: {
url: 'ldap://ldap.example.com:389',
bindDN: 'cn=admin,dc=example,dc=org',
bindCredentials: 'admin_password',
searchBase: 'ou=users,dc=example,dc=org',
searchFilter: '(uid={{username}})',
groupSearchBase: 'ou=groups,dc=example,dc=org',
groupSearchFilter: '(&(objectClass=groupOfNames)(member={{dn}}))',
groupDnProperty: 'dn',
searchScope: 'sub',
groupSearchScope: 'sub',
userAttributes: {
userId: 'uid',
login: 'uid',
email: 'mail',
firstName: 'givenName',
lastName: 'sn',
},
groupAttributes: {
groupId: 'dn',
title: 'cn',
},
roleToGroupId: {
'datalens.admin': 'cn=datalensadmin,ou=groups,dc=example,dc=org',
'datalens.creator': 'cn=datalenscreator,ou=groups,dc=example,dc=org',
},
syncUserRoles: true,
syncUserGroups: true,
},
};
Пример ldif файла для конфигурации OpenLDAP
## base
dn: ou=users,dc=example,dc=org
changetype: add
ou: users
objectClass: organizationalUnit
description: Org group for users.
dn: ou=groups,dc=example,dc=org
changetype: add
ou: groups
objectClass: organizationalUnit
description: Org group for groups.
## users
dn: uid=bob,ou=users,dc=example,dc=org
changetype: add
uid: bob
cn: Bob Smith
givenName: Bob
sn: Smith
objectClass: inetOrgPerson
userPassword: bob
mail: bob@example.org
dn: uid=al,ou=users,dc=example,dc=org
changetype: add
uid: al
cn: Al Brown
givenName: Al
sn: Brown
objectClass: inetOrgPerson
userPassword: al
mail: al@example.org
dn: uid=carl,ou=users,dc=example,dc=org
changetype: add
uid: carl
cn: Carl Snow
givenName: Carl
sn: Snow
objectClass: inetOrgPerson
userPassword: carl
mail: carl@example.org
## groups
dn: cn=someusers,ou=groups,dc=example,dc=org
changetype: add
objectclass: groupofnames
cn: someusers
description: Some Group
member: uid=al,ou=users,dc=example,dc=org
member: uid=bob,ou=users,dc=example,dc=org
## groups-roles
dn: cn=datalensadmin,ou=groups,dc=example,dc=org
changetype: add
objectclass: groupofnames
cn: datalensadmin
description: Group datalens.admin role
member: uid=bob,ou=users,dc=example,dc=org
dn: cn=datalenscreator,ou=groups,dc=example,dc=org
changetype: add
objectclass: groupofnames
cn: datalenscreator
description: Group datalens.creator role
member: uid=al,ou=users,dc=example,dc=org
Утилита ldapsearch
Рекомендуем предварительно проверить работу конфигурации утилитой ldapsearch:
# поиск юзера
ldapsearch \
-H ldap://ldap.example.com:389 \
-x \
-D cn=admin,dc=example,dc=org \
-w admin \
-b ou=users,dc=example,dc=org \
"(uid=bob)"
# ldapsearch \
# -H ldap://ldap.example.com:389 \ # config.url
# -x \
# -D cn=admin,dc=example,dc=org \ # config.bindDN
# -w admin \ # config.bindCredentials
# -b ou=users,dc=example,dc=org \ # config.searchBase
# "(uid=bob)" # config.searchFilter с подставленным в шаблонную строку {{username}} логин пользователя при заходе в DL
# Ответ из LDAP:
# dn: uid=bob,ou=users,dc=example,dc=org
# uid: bob
# cn: Bob Smith
# givenName: Bob
# sn: Smith
# objectClass: inetOrgPerson
# userPassword:: ...
# mail: bob@example.org
# поиск групп пользователя
ldapsearch \
-H ldap://ldap.example.com:389 \
-x \
-D cn=admin,dc=example,dc=org \
-w admin \
-b ou=groups,dc=example,dc=org \
"(&(objectClass=groupOfNames)(member=uid=bob,ou=users,dc=example,dc=org))"
# ldapsearch \
# -H ldap://ldap.example.com:389 \ # config.url
# -x \
# -D cn=admin,dc=example,dc=org \ # config.bindDN
# -w admin \ # config.bindCredentials
# -b ou=groups,dc=example,dc=org \ # config.groupSearchBase
# "(&(objectClass=groupOfNames)(member=uid=bob,ou=users,dc=example,dc=org))" # config.groupSearchFilter
# Выше мы получили пользователя bob и подставили в шаблонную строку {{dn}}: (&(objectClass=groupOfNames)(member={{dn}})) его dn согласно config.groupDnProperty
# Ответ из LDAP:
# someusers, groups, example.org
# dn: cn=someusers,ou=groups,dc=example,dc=org
# objectClass: groupOfNames
# cn: someusers
# description: Some Group
# member: uid=bob,ou=users,dc=example,dc=org
# member: uid=al,ou=users,dc=example,dc=org
# datalensadmin, groups, example.org
# dn: cn=datalensadmin,ou=groups,dc=example,dc=org
# objectClass: groupOfNames
# description: Group datalens.admin role
# member: uid=bob,ou=users,dc=example,dc=org
# cn: datalensadmin
Пример конфигурации для Active Directory
const adConfig = {
slug: 'active-directory',
title: 'Active Directory',
type: 'ldap',
defaultRole: 'datalens.visitor',
config: {
url: 'ldap://ad.example.com:389',
bindDN: 'CN=Service Account,OU=Service Accounts,DC=example,DC=com',
bindCredentials: 'service_account_password',
searchBase: 'OU=Users,DC=example,DC=com',
searchFilter: '(&(objectClass=user)(sAMAccountName={{username}}))',
groupSearchBase: 'OU=Groups,DC=example,DC=com',
groupSearchFilter: '(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{dn}}))',
groupDnProperty: 'dn',
searchScope: 'sub',
groupSearchScope: 'sub',
userAttributes: {
userId: 'sAMAccountName',
login: 'sAMAccountName',
email: 'mail',
firstName: 'givenName',
lastName: 'sn',
},
groupAttributes: {
groupId: 'dn',
title: 'cn',
},
roleToGroupId: {
'datalens.admin': 'CN=DatalensAdmins,OU=Groups,DC=example,DC=com',
'datalens.creator': 'CN=DatalensCreators,OU=Groups,DC=example,DC=com',
},
syncUserRoles: true,
syncUserGroups: true,
},
};
Пример настройки через переменную окружения AUTH_PROVIDERS_CONFIG
Для настройки провайдеров аутентификации в приложении используется переменная окружения AUTH_PROVIDERS_CONFIG. Эта переменная содержит JSON-строку с массивом конфигураций всех провайдеров аутентификации. В настоящее время поддерживается только LDAP-провайдер, но в будущем планируется добавление других типов провайдеров.
Пример значения переменной окружения AUTH_PROVIDERS_CONFIG:
[
{
"slug": "openldap",
"title": "OpenLDAP",
"type": "ldap",
"defaultRole": "datalens.visitor",
"config": {
"url": "ldap://ldap.example.com:389",
"bindDN": "cn=admin,dc=example,dc=org",
"bindCredentials": "admin_password",
"searchBase": "ou=users,dc=example,dc=org",
"searchFilter": "(uid={{username}})",
"groupSearchBase": "ou=groups,dc=example,dc=org",
"groupSearchFilter": "(&(objectClass=groupOfNames)(member={{dn}}))",
"groupDnProperty": "dn",
"searchScope": "sub",
"groupSearchScope": "sub",
"roleToGroupId": {
"datalens.admin": "cn=datalensadmin,ou=groups,dc=example,dc=org",
"datalens.creator": "cn=datalenscreator,ou=groups,dc=example,dc=org"
},
"syncUserRoles": true,
"syncUserGroups": true
}
}
]
Предыдущая
Следующая