
SSO Netbox + Keycloak
Netbox — веб приложение с открытым исходным кодом, разработанное для управления и документирования компьютерных сетей. Изначально Netbox придуман командой сетевых инженеров DigitalOcean специально для системных администраторов.
- Ранее была опубликована стать по установке Netbox
- так же ранее была опубликована статья по установке Keycloak
Настройка Keycloak
В вэб-админке Keycloak создаем новую область (realm), например itdraft, в ней настраиваем либо федерацию с LDAP MS Active Directory или FreeIPA, либо просто добавляем пользователей.
Настроим клиента в Keycloak: переходим в раздел Clients и создаем нового клиента (Create client)



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/*
Сохраняем, переходим в настройки клиента, копируем “секрет”
Tab "Credentials"
Client Authenticator: Client Id and Secret
Client secret: xxx # Понадобится для дальнейшей настройки Netbox
Переходим во вкладку “Advanced”, устанавливаем параметры в 2-х полях
Tab "Advanced"
User info signed response algorithm: RS256
Request object signature algorithm: RS256
Добавляем mapper, для этого переходим во вкладку Client scopes и в активную ссылку “netbox-dedicated”


Add mapper
Mapper type: Audience
Name: netbox
Included Client Audience: netbox
Add to ID token: Yes
Add to access token: Yes
Осталось скопировать публичный ключ
Realm settins > Keys > RS256 > Public key
MIIBI...AB
Настройка Netbox
Переключаемся на root, активируем виртуальную среду python, устанавливаем 2 библиотеки
$ 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
$ sudo nano /opt/netbox/local_requirements.txt ... django-social-auth social-auth-core
Редактируем конфиг netbox
(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 = {} ...
Выполняем процедуру миграции
(venv) # cd /opt/netbox/netbox/ (venv) # python3 manage.py migrate
Деактивируем виртуальную среду python, переключаемся на нашего пользователя, перезапускаем сервисы
(venv) # deactivate # exit $ sudo systemctl restart netbox netbox-rq $ sudo systemctl status netbox $ sudo systemctl status netbox-rq