Пост

SSO авторизация в Netbox через Keycloak

SSO авторизация в Netbox через Keycloak

Netbox — веб приложение с открытым исходным кодом, разработанное для управления и документирования компьютерных сетей. Изначально Netbox придуман командой сетевых инженеров DigitalOcean специально для системных администраторов.

Настройка Keycloak

В вэб-админке Keycloak создаем новую область (realm), например itdraft, в ней настраиваем либо федерацию с LDAP MS Active Directory или FreeIPA, либо просто добавляем пользователей.

Настроим клиента в Keycloak: переходим в раздел Clients и создаем нового клиента (Create client)

1
2
3
4
5
6
7
8
9
10
11
12
General Settings
Client type: OpenID Connect
Client ID: netbox # Понадобится для дальнейшей настройки SeaFile

Capability config
Client authentication: On
Authentication flow: Standard flow, Direct access grants

Login settings
Root URL: https://netbox.itdraft.ru
Home URL: https://netbox.itdraft.ru
Valid redirect URIs: https://netbox.itdraft.ru/*

Сохраняем, переходим в настройки клиента, копируем “секрет”

1
2
3
Tab "Credentials"
Client Authenticator: Client Id and Secret
Client secret: xxx # Понадобится для дальнейшей настройки Netbox

Переходим во вкладку “Advanced”, устанавливаем параметры в 2-х полях

1
2
3
Tab "Advanced"
User info signed response algorithm: RS256
Request object signature algorithm: RS256

Добавляем mapper, для этого переходим во вкладку Client scopes и в активную ссылку netbox-dedicated

1
2
3
4
5
6
Add mapper
Mapper type: Audience
Name: netbox
Included Client Audience: netbox
Add to ID token: Yes
Add to access token: Yes

Осталось скопировать публичный ключ

1
2
Realm settins > Keys > RS256 > Public key
MIIBI...AB

Настройка Netbox

Переключаемся на root, активируем виртуальную среду python, устанавливаем 2 библиотеки

1
2
3
4
5
$ sudo su
# source /opt/netbox/venv/bin/activate
(venv) # cd /opt/netbox/netbox
(venv) # pip install django-social-auth
(venv) # pip install social-auth-core

Добавляем их в local_requirements.txt

1
2
3
4
$ sudo nano /opt/netbox/local_requirements.txt
...
django-social-auth
social-auth-core

Редактируем конфиг Netbox

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(venv) # nano /opt/netbox/netbox/netbox/configuration.py
...
REMOTE_AUTH_ENABLED = True
REMOTE_AUTH_BACKEND = 'social_core.backends.keycloak.KeycloakOAuth2'
SOCIAL_AUTH_KEYCLOAK_KEY = 'netbox'
SOCIAL_AUTH_KEYCLOAK_SECRET = 'xx'
SOCIAL_AUTH_KEYCLOAK_PUBLIC_KEY = 'MIIBI....AB'
SOCIAL_AUTH_KEYCLOAK_AUTHORIZATION_URL = 'https://keycloak.itdraft.ru:8443/realms/itdraft/protocol/openid-connect/auth'
SOCIAL_AUTH_KEYCLOAK_ACCESS_TOKEN_URL = 'https://keycloak.itdraft.ru:8443/realms/itdraft/protocol/openid-connect/token'
SOCIAL_AUTH_KEYCLOAK_ID_KEY = 'email'
SOCIAL_AUTH_VERIFY_SSL = False
REMOTE_AUTH_HEADER = 'HTTP_REMOTE_USER'
REMOTE_AUTH_AUTO_CREATE_USER = True
REMOTE_AUTH_DEFAULT_GROUPS = []
REMOTE_AUTH_DEFAULT_PERMISSIONS = {}
...

Выполняем процедуру миграции

1
2
(venv) # cd /opt/netbox/netbox/
(venv) # python3 manage.py migrate

Деактивируем виртуальную среду Python, переключаемся на нашего пользователя, перезапускаем сервисы

1
2
3
4
5
(venv) # deactivate
# exit
$ sudo systemctl restart netbox netbox-rq
$ sudo systemctl status netbox
$ sudo systemctl status netbox-rq

Update 19.12.2023 (Ошибка после обновления Netbox)

При обновлении Netbox с версии v3.4.2 до v3.6.7 появилась ошибка:

1
TypeError: object of type 'map' has no len()

Решение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo su
# source /opt/netbox/venv/bin/activate
(venv) # cd /opt/netbox/netbox
(venv) # pip uninstall python-openid
(venv) # pip uninstall python3-openid
(venv) # pip install social-auth-app-django
(venv) # nano /opt/netbox/local_requirements.txt
...
#django-social-auth
#social-auth-core
social-auth-app-django

(venv) # python3 manage.py migrate
(venv) # deactivate
$ sudo systemctl restart netbox netbox-rq
Авторский пост защищен лицензией CC BY 4.0 .