Skip to content
You are reading the docs for version 0.7. The current one is 0.8. Switch →

Grafana — вход через Zentro, роли по правам Zentro

This content is not available in your language yet.

Grafana: Generic OAuth — в веб-интерфейсе (Administration → Authentication → Generic OAuth, Grafana 10.4+), в grafana.ini ([auth.generic_oauth]) или переменными GF_AUTH_GENERIC_OAUTH_*. Ниже https://id.example.com — адрес Zentro, https://grafana.example.com — адрес Grafana.

Админка → Приложения → Добавить, тип «Люди — вход в приложение через Zentro»:

Поле Значение
Redirect URI https://grafana.example.com/login/generic_oauth
Scopes openid profile email
Post-logout redirect URI https://grafana.example.com/login
Доступ → Пространство прав GRAFANA
Приложение организации — не спрашивать согласие вкл

«Публичный клиент» не отмечать — у Grafana есть секрет. client_secret показывается один раз. Роли Zentro с правами GRAFANA:*:ADMIN, GRAFANA:*:EDIT, GRAFANA:*:VIEW (Роли) назначьте людям — права уходят Grafana в claim permissions. Общее для всех приложений — README.

Grafana внутри сервиса (мастер сервиса). Пространство прав приложения в сервисе — только ключ сервиса: галочка «Передавать приложению права пользователя в KEY». Тогда и права в ролях, и выражение роли в Grafana (ниже) — с этим ключом (ZENTRO:*:ADMIN и т. п.), и Grafana получит все права пользователя в этом пространстве. Поля Scopes в мастере нет — приложение создаётся только с openid: после создания откройте Приложения → карточка → Изменить → Scopes и впишите openid profile email, иначе вход упадёт с invalid_scope.

Administration → Authentication → Generic OAuth:

Вкладка Поле Значение
General settings Display name Zentro
Client Id / Client secret из Zentro
Scopes openid, profile, email
Auth URL https://id.example.com/oidc/authorize
Token URL https://id.example.com/oidc/token
API URL https://id.example.com/oidc/userinfo
Allow sign up вкл
Sign out redirect URL https://id.example.com/oidc/end_session?client_id=<client_id>&post_logout_redirect_uri=https%3A%2F%2Fgrafana.example.com%2Flogin
User mapping Login attribute path preferred_username
Email attribute path email
Name attribute path preferred_username
Role attribute path выражение ниже
Role attribute strict mode вкл
Extra security Use PKCE вкл (без PKCE Zentro отказывает)
Use refresh token вкл

Выражение роли (подставьте своё пространство прав):

contains(permissions[*], 'GRAFANA:*:ADMIN') && 'Admin' || contains(permissions[*], 'GRAFANA:*:EDIT') && 'Editor' || contains(permissions[*], 'GRAFANA:*:VIEW') && 'Viewer'

Save и Enable. Адрес Grafana (root_url) веб-интерфейс не задаёт — см. ниже.

[server]
root_url = https://grafana.example.com/
[auth.generic_oauth]
enabled = true
name = Zentro
allow_sign_up = true
client_id = <client_id>
client_secret = <client_secret>
scopes = openid email profile
auth_url = https://id.example.com/oidc/authorize
token_url = https://id.example.com/oidc/token
api_url = https://id.example.com/oidc/userinfo
use_pkce = true
use_refresh_token = true
login_attribute_path = preferred_username
email_attribute_path = email
name_attribute_path = preferred_username
role_attribute_path = contains(permissions[*], 'GRAFANA:*:ADMIN') && 'Admin' || contains(permissions[*], 'GRAFANA:*:EDIT') && 'Editor' || contains(permissions[*], 'GRAFANA:*:VIEW') && 'Viewer'
role_attribute_strict = true
signout_redirect_url = https://id.example.com/oidc/end_session?client_id=<client_id>&post_logout_redirect_uri=https%3A%2F%2Fgrafana.example.com%2Flogin

В Docker — те же ключи переменными: GF_SERVER_ROOT_URL, GF_AUTH_GENERIC_OAUTH_ENABLED, GF_AUTH_GENERIC_OAUTH_CLIENT_ID и т. д.

  • root_url — из него Grafana собирает адрес возврата; он должен совпасть с Redirect URI в Zentro. За прокси без root_url уходит http://localhost:3000/login/generic_oauth, и Zentro отклоняет запрос.
  • Token URL и API URL Grafana вызывает сама: адрес Zentro должен открываться с сервера (из контейнера) Grafana.
  • role_attribute_strict = true — пользователь без прав в Grafana не войдёт. Уберите, чтобы такие получали роль по умолчанию (auto_assign_org_role).
  • Права меняются в Zentro — роль в Grafana обновляется при следующем входе.

Войти пользователем с правом …:EDIT → Profile → роль Editor. Нет кнопки «Sign in with Zentro» — провайдер не включён (Enable / enabled = true и перезапуск Grafana).

Причину Grafana пишет в лог (docker logs grafana 2>&1 | grep -i "failed to login"): error= — код отказа Zentro, errorDesc= — пояснение (Zentro пишет его с версии 0.8.0).

Что видно Причина Что сделать
«Login provider denied login request», error=invalid_scope Grafana просит scope, которого нет у приложения (часто — создано мастером сервиса, только openid) Zentro: Scopes приложения openid profile email; в Grafana — ровно эти три
то же, error=invalid_request выключен PKCE Grafana: Use PKCE вкл
то же, error=consent_required не отмечено «Приложение организации» Zentro: отметить
Страница ошибки Zentro, в Grafana не вернулись не тот Client Id или адрес возврата не совпадает с Redirect URI проверить Client Id и root_url
«User sync failed» в Grafana уже есть локальный пользователь с тем же логином или почтой (например admin), Grafana 10+ не связывает его с входом через OAuth переименовать локального пользователя Grafana или включить oauth_allow_insecure_email_lookup = true ([auth]) — связывание по почте
«Invalid role» / нет доступа у пользователя нет прав в пространстве приложения, включён strict mode назначить роль с правом …:VIEW и выше или поправить выражение роли