Panel SSO с Keycloak
За последние несколько лет Panel приобрела большую популярность благодаря своему неограниченному списку функций для извлечения, анализа, представления любых типов данных и использования знакомых инструментов python. И все это без необходимости писать ни одной строки кода пользовательского интерфейса (вы можете, если действительно хотите). О функциях панели и ее возможностях было много написано. Этот пост в первую очередь посвящен подключению и аутентификации панели с помощью OAuth.
Panel имеет встроенную систему аутентификации и авторизации. По умолчанию Panel поддерживает
- azure
- bitbucket
- github
- gitlab
- google
- okta
В дополнение к этому Panel также может подключаться к любому универсальному провайдеру oAuth. Нам определенно хотелось поработать с Keycloak, которого нет в этом списке. Это не очень хорошо документировано, однако это действительно легко сделать. Это можно сделать одним из двух способов.
Переменная среды
Вы можете настроить следующую переменную env с соответствующими значениями. Это будет подробно рассмотрено в примере Keycloak.
export PANEL_OAUTH_KEY
export PANEL_OAUTH_SECRET
export PANEL_OAUTH_AUTHORIZE_URL
export PANEL_OAUTH_TOKEN_URL
export PANEL_OAUTH_USER_URL
export PANEL_COOKIE_SECRET
export PANEL_OAUTH_REDIRECT_URL
Параметр командной строки
Вы можете передать следующие параметры с соответствующими значениями через командную строку во время выполнения панели.
panel serve MyAnalysis.py --oauth-provider=generic \
--oauth-key=ClientID --oauth-secret=SECRET --cookie-secret=panel \
--oauth-redirect-uri="multiple_pages" --oauth-extra-params="{'TOKEN_URL':'', 'AUTHORIZE_URL':'', 'USER_URL':''}"
Настройка Keycloak для OAuth SSO
Настройка клиента:
Создайте клиента внутри этой области. Убедитесь, что вы выбрали тип доступа как конфиденциальный.
Заполните другой URL соответствующим образом
Тип доступа должен быть конфиденциальным.
Получение URL-адресов OAuth.
Получите Secret клиента и скопируйте его в PANEL_OAUTH_SECRET
Перейдите в Realm Setting → General → Endpoints
Нажмите OpenID Endpoint Configuration
Запишите следующие URL-адреса
"authorization_endpoint": "http://localhost:8080/realms/myrealm/protocol/openid-connect/auth",
"token_endpoint": "http://localhost:8080/realms/myrealm/protocol/openid-connect/token",
"introspection_endpoint": "http://localhost:8080/realms/myrealm/protocol/openid-connect/token/introspect",
"userinfo_endpoint": "http://localhost:8080/realms/myrealm/protocol/openid-connect/userinfo",
"end_session_endpoint": "http://localhost:8080/realms/myrealm/protocol/openid-connect/logout",
Экспортируйте их как переменные Env
export PANEL_OAUTH_KEY=panel-sso
export PANEL_OAUTH_SECRET="Pm8Bcs6QgygjaiyxRxSTfPpIzUkW40lM"
export PANEL_OAUTH_AUTHORIZE_URL="http://localhost:8080/realms/myrealm/protocol/openid-connect/auth"
export PANEL_OAUTH_TOKEN_URL="http://localhost:8080/realms/myrealm/protocol/openid-connect/token"
export PANEL_OAUTH_USER_URL="http://localhost:8080/realms/myrealm/protocol/openid-connect/userinfo"
export PANEL_COOKIE_SECRET="bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E="
export PANEL_OAUTH_REDIRECT_URL="http://localhost:5006"
Запуск Panel с общим SSO
panel serve my_pages.py --oauth-provider=generic
Вы должны увидеть логин keycloak
Panel - это удивительный инструмент. Возможность подключения к любому универсальному поставщику OAuth проста и должна обеспечивать его безопасный доступ.