SSO авторизация в Netbox через Keycloak
Netbox — веб приложение с открытым исходным кодом, разработанное для управления и документирования компьютерных сетей. Изначально Netbox придуман командой сетевых инженеров DigitalOcean специально для системных администраторов.
- Ранее была опубликована стать по установке Netbox
- Tак же, ранее была опубликована статья по установке Keycloak
Настройка 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