Настройка аутентификации Generic OAuth
[ru] DOCS_SHARED: "docs/grafana/latest/setup-grafana/configure-access/configure-authentication/generic-oauth/index.ru.md" ("/hugo/content/docs/grafana/latest/setup-grafana/configure-access/configure-authentication/generic-oauth/index.ru.md:24:1") shared directory "docs/grafana/latest/shared" not found
Grafana предоставляет интеграции OAuth2 для следующих провайдеров аутентификации:
Если вашего провайдера OAuth2 нет в списке, вы можете использовать аутентификацию Generic OAuth.
В этом разделе описано, как настроить аутентификацию Generic OAuth с помощью разных методов, и приведены примеры настройки Generic OAuth с конкретными провайдерами OAuth2.
Перед началом
Чтобы следовать этому руководству:
- Убедитесь, что вы знаете, как создать приложение OAuth2 у вашего провайдера OAuth2. Дополнительную информацию смотрите в документации вашего провайдера OAuth2.
- Убедитесь, что ваш провайдер идентификации возвращает информацию, совместимую с OpenID UserInfo, например утверждение
sub. - Если вы используете refresh-токены, убедитесь, что вы знаете, как их настроить у вашего провайдера OAuth2. Дополнительную информацию смотрите в документации вашего провайдера OAuth2.
Note
Если пользователи используют одинаковый адрес электронной почты в Entra ID и в других провайдерах аутентификации (например, Grafana.com), вам нужно выполнить дополнительную настройку, чтобы гарантировать правильное сопоставление пользователей. Дополнительную информацию см. в документации Использование одного и того же адреса электронной почты для входа через разных провайдеров идентификации.
Настройка клиента аутентификации generic OAuth через интерфейс Grafana
Как администратор Grafana вы можете настроить клиент Generic OAuth изнутри Grafana через интерфейс Generic OAuth. Для этого перейдите на страницу Administration > Authentication > Generic OAuth и заполните форму. Если у вас есть текущая конфигурация в файле конфигурации Grafana, форма будет предварительно заполнена этими значениями, в противном случае форма будет содержать значения по умолчанию.
После того как вы заполнили форму, нажмите Save, чтобы сохранить конфигурацию. Если сохранение прошло успешно, Grafana применит новые конфигурации.
Если вам нужно сбросить изменения, сделанные в интерфейсе, обратно к значениям по умолчанию, нажмите Reset. После сброса изменений Grafana применит конфигурацию из файла конфигурации Grafana (если есть какая-либо конфигурация) или значения по умолчанию.
Note
Если вы запускаете Grafana в режиме высокой доступности, изменения конфигурации могут примениться не ко всем экземплярам Grafana сразу. Возможно, вам придётся подождать несколько минут, пока конфигурация распространится на все экземпляры Grafana.
Дополнительную информацию см. в разделе параметры конфигурации.
Настройка клиента аутентификации generic OAuth с помощью провайдера Terraform
resource "grafana_sso_settings" "generic_sso_settings" {
provider_name = "generic_oauth"
oauth2_settings {
name = "Auth0"
auth_url = "https://<domain>/authorize"
token_url = "https://<domain>/oauth/token"
api_url = "https://<domain>/userinfo"
client_id = "<client id>"
client_secret = "<client secret>"
allow_sign_up = true
auto_login = false
scopes = "openid profile email offline_access"
use_pkce = true
use_refresh_token = true
}
}
Полное справочное руководство по использованию ресурса grafana_sso_settings см. в Terraform Registry.
Настройка клиента аутентификации generic OAuth с помощью файла конфигурации Grafana
Убедитесь, что у вас есть доступ к файлу конфигурации Grafana.
Шаги
Чтобы интегрировать вашего провайдера OAuth2 с Grafana с помощью нашей аутентификации Generic OAuth, выполните следующие шаги:
-
Создайте приложение OAuth2 у выбранного вами провайдера OAuth2.
-
Установите callback URL для вашего приложения OAuth2 в
http://<my_grafana_server_name_or_ip>:<grafana_server_port>/login/generic_oauth.Убедитесь, что callback URL — это полный HTTP-адрес, который вы используете для доступа к Grafana через браузер, но с добавленным путём
/login/generic_oauth.Чтобы callback URL был корректным, может потребоваться установить параметр
root_urlв разделе[server]файла конфигурации Grafana. Например, если вы обслуживаете Grafana за прокси. -
Обратитесь к следующей таблице, чтобы обновить значения полей, расположенных в разделе
[auth.generic_oauth]файла конфигурации Grafana:Просмотрите список других параметров конфигурации Generic OAuth и заполните их по мере необходимости.
-
Необязательно: Настройте refresh-токен:
a. Расширьте поле
scopesраздела[auth.generic_oauth]в файле конфигурации Grafana областью refresh-токена, используемой вашим провайдером OAuth2.b. Установите
use_refresh_tokenвtrueв разделе[auth.generic_oauth]в файле конфигурации Grafana.c. Включите refresh-токен у провайдера, если это требуется.
-
Необязательно: Настройте синхронизацию команд.
-
Перезапустите Grafana.
Теперь вы должны увидеть кнопку входа Generic OAuth на странице входа и иметь возможность войти или зарегистрироваться у вашего провайдера OAuth2.
Настройка входа
Grafana может определить логин пользователя из ID-токена OAuth2, информации о пользователе, полученной от конечной точки UserInfo OAuth2, или access-токена OAuth2. Grafana просматривает эти источники в указанном порядке, пока не найдёт логин. Если логин не найден, то логин пользователя устанавливается в адрес электронной почты пользователя.
Important
Электронная почта обязательна для успешной регистрации и входа с Generic OAuth. Даже если вы сопоставляете
loginиз другого утверждения (например,sub), Grafana всё равно требует наличия у пользователя адреса электронной почты. Убедитесь, что ваш провайдер возвращает утверждение email, или настройтеemail_attribute_path, чтобы Grafana мог его определить. Включение областиopenid profile email).
Обратитесь к следующей таблице за информацией о том, что настраивать в зависимости от того, как ваш провайдер Oauth2 возвращает логин пользователя:
Использование утверждения sub для логина
Большинство провайдеров OAuth2 предоставляют стабильный идентификатор субъекта в утверждении sub. Вы можете использовать его для заполнения логина Grafana, установив login_attribute_path в sub. Поскольку электронная почта всё ещё обязательна, также убедитесь, что Grafana может определить адрес электронной почты пользователя (например, включив область email или сопоставив пользовательское поле через email_attribute_path).
Пример конфигурации:
[auth.generic_oauth]
enabled = true
scopes = openid profile email
login_attribute_path = sub
# If your provider does not return `email` at the top level, map it explicitly
# email_attribute_path = user.email
Настройка отображаемого имени
Grafana может определить отображаемое имя пользователя из ID-токена OAuth2, информации о пользователе, полученной от конечной точки UserInfo OAuth2, или access-токена OAuth2. Grafana просматривает эти источники в указанном порядке, пока не найдёт отображаемое имя. Если отображаемое имя не найдено, вместо него отображается логин пользователя.
Обратитесь к следующей таблице за информацией о том, что вам нужно настроить в зависимости от того, как ваш провайдер Oauth2 возвращает имя пользователя:
Настройка адреса электронной почты
Grafana может определить адрес электронной почты пользователя из ID-токена OAuth2, информации о пользователе, полученной от конечной точки UserInfo OAuth2, access-токена OAuth2 или конечной точки /emails OAuth2.
Grafana просматривает эти источники в указанном порядке, пока не найдёт адрес электронной почты.
Если адрес электронной почты не найден, то адрес электронной почты пользователя устанавливается в пустую строку.
Обратитесь к следующей таблице за информацией о том, что настраивать в зависимости от того, как провайдер Oauth2 возвращает адрес электронной почты пользователя:
Настройка refresh-токена
Когда пользователь входит в систему с помощью провайдера OAuth2, Grafana проверяет, что access-токен не истёк. Когда access-токен истекает, Grafana использует предоставленный refresh-токен (если он есть) для получения нового access-токена.
Grafana использует refresh-токен для получения нового access-токена без необходимости для пользователя входить в систему снова. Если refresh-токен не существует, Grafana выполняет выход пользователя из системы после истечения access-токена.
Чтобы настроить Generic OAuth на использование refresh-токена, установите параметр конфигурации use_refresh_token в true и выполните один или оба следующих шага, если это требуется:
- Расширьте поле
scopesраздела[auth.generic_oauth]в файле конфигурации Grafana дополнительными областями. - Включите refresh-токен у провайдера.
Note
Переключатель функции
accessTokenExpirationCheckбыл удалён в Grafana v10.3.0, и вместо него для настройки получения refresh-токена и проверки истечения access-токена будет использоваться значение конфигурацииuse_refresh_token.
Настройка валидации ID-токена JWT
По умолчанию Grafana извлекает информацию о пользователе из ID-токенов, не проверяя их криптографические подписи. Для повышения безопасности вы можете включить валидацию подписи JWT, чтобы гарантировать, что ID-токены подлинны и не были подделаны.
Чтобы включить валидацию ID-токена JWT:
-
Установите
validate_id_tokenвtrueв разделе[auth.generic_oauth]файла конфигурации Grafana. -
Настройте
jwk_set_urlс URL конечной точки JSON Web Key Set (JWKS) вашего провайдера OAuth2. Эта конечная точка предоставляет публичные ключи, используемые для проверки подписей JWT.Распространённые расположения конечных точек JWKS:
- Провайдеры OIDC:
https://<provider-domain>/.well-known/jwks.json - Auth0:
https://<tenant>.auth0.com/.well-known/jwks.json - Keycloak:
https://<keycloak-domain>/realms/<realm>/.well-known/openid-configuration(содержитjwks_uri)
- Провайдеры OIDC:
Пример конфигурации:
[auth.generic_oauth]
enabled = true
validate_id_token = true
jwk_set_url = https://your-provider.com/.well-known/jwks.json
client_id = <client id>
client_secret = <client secret>
auth_url = https://your-provider.com/authorize
token_url = https://your-provider.com/token
api_url = https://your-provider.com/userinfo
Note
Когда валидация JWT включена, Grafana кэширует ключи JWKS для повышения производительности. Кэш учитывает заголовок
Cache-Controlиз ответа конечной точки JWKS. Если срок истечения кэша не указан, ключи кэшируются на 5 минут по умолчанию.
Caution
Если
validate_id_tokenустановлен вtrue, вы должны настроитьjwk_set_url. Аутентификация завершится неудачей, если JWK Set URL не предоставлен или если подпись ID-токена не может быть проверена.
Настройка сопоставления ролей
Если только не включён параметр skip_org_role_sync, роль пользователя будет установлена в роль, полученную от провайдера аутентификации при входе пользователя.
Роль пользователя извлекается с помощью выражения JMESPath из параметра конфигурации role_attribute_path.
Grafana сначала вычислит выражение, используя ID-токен OAuth2. Если роль не найдена, выражение будет вычислено с использованием информации о пользователе, полученной от конечной точки UserInfo. Если роль всё ещё не найдена, выражение будет вычислено с использованием access-токена OAuth2.
Чтобы сопоставить роль администратора сервера, используйте параметр конфигурации allow_assign_grafana_admin.
Дополнительную информацию см. в разделе параметры конфигурации.
Если допустимая роль не найдена, пользователю назначается роль, указанная параметром auto_assign_org_role.
Вы можете отключить это назначение роли по умолчанию, установив role_attribute_strict = true. Этот параметр запрещает доступ пользователю, если не возвращена роль или возвращена недопустимая роль после вычисления выражений role_attribute_path и org_mapping.
Вы можете использовать параметры конфигурации org_attribute_path и org_mapping для назначения пользователя организациям и указания его роли. Дополнительную информацию см. в разделе Пример сопоставления ролей организации. Если указаны и сопоставление роли организации (org_mapping), и обычное сопоставление роли (role_attribute_path), то пользователь получит более высокую из двух сопоставленных ролей.
Чтобы упростить настройку правильного выражения JMESPath, перейдите на JMESPath, чтобы протестировать и оценить выражения с пользовательскими полезными нагрузками.
Note
При использовании
org_attribute_pathзначение, возвращаемое выражением JMESPath, должно быть массивом, а не строкой.
Примеры сопоставления ролей
В этом разделе приведены примеры выражений JMESPath, используемых для сопоставления ролей.
Сопоставление роли организации пользователя
В этом примере пользователю предоставлена роль Editor. Назначенная роль основана на значении свойства role, которое должно быть допустимой ролью Grafana, такой как Admin, Editor, Viewer или None.
Полезная нагрузка:
{
...
"role": "Editor",
...
}
Конфигурация:
role_attribute_path = role
В следующем более сложном примере пользователю предоставлена роль Admin. Это потому, что он является членом группы admin своего провайдера OAuth2.
Если бы пользователь был членом группы editor, ему была бы предоставлена роль Editor, в противном случае Viewer.
Полезная нагрузка:
{
...
"groups": [
"engineer",
"admin",
],
...
}
Конфигурация:
role_attribute_path = contains(groups[*], 'admin') && 'Admin' || contains(groups[*], 'editor') && 'Editor' || 'Viewer'
Сопоставление роли администратора сервера
В следующем примере пользователю предоставляется роль администратора сервера Grafana.
Полезная нагрузка:
{
...
"roles": [
"admin",
],
...
}
Конфигурация:
role_attribute_path = contains(roles[*], 'admin') && 'GrafanaAdmin' || contains(roles[*], 'editor') && 'Editor' || 'Viewer'
allow_assign_grafana_admin = true
Сопоставление одной роли всем пользователям
В этом примере всем пользователям будет назначена роль Viewer независимо от информации о пользователе, полученной от провайдера идентификации.
Конфигурация:
role_attribute_path = "'Viewer'"
skip_org_role_sync = false
Сопоставление ролей организации
Поле org_mapping принимает список сопоставлений "<ExternalName>:<OrgIdOrName>:<Role>", разделённых пробелами или запятыми.
Можно заменить ExternalName или OrgIdOrName на * как «совпадает с любым».
Частичные совпадения рассматривают * как часть имени (например, *-org не совпадает с my-org)
Пример сопоставления ролей организации
В этом примере пользователю предоставлена роль Viewer в организации org_foo и роль Editor в организациях org_bar и org_baz.
Если бы пользователь был членом группы admin, ему была бы предоставлена роль администратора сервера Grafana.
Полезная нагрузка:
{
"roles": ["org_foo", "org_bar", "another_org"]
}
Конфигурация:
role_attribute_path = contains(roles[*], 'admin') && 'GrafanaAdmin' || 'None'
allow_assign_grafana_admin = true
org_attribute_path = roles
org_mapping = org_foo:org_foo:Viewer org_bar:org_bar:Editor *:org_baz:Editor
Настройка синхронизации команд
Note
Доступно в Grafana Enterprise и для клиентов на отдельных планах Grafana Cloud. Информацию о ценах см. на странице цены или свяжитесь с нашей командой продаж.
Используя синхронизацию команд, вы можете связать ваши группы OAuth2 с командами внутри Grafana. Это автоматически назначит пользователей соответствующим командам. Команды для каждого пользователя синхронизируются при входе пользователя в систему.
На группы Generic OAuth можно ссылаться по group ID, например 8bab1c86-8fba-33e5-2089-1d1c80ec267d или myteam.
Информацию о группах можно извлечь из ID-токена OAuth2, информации о пользователе от конечной точки UserInfo или access-токена OAuth2.
Информацию о настройке групп OAuth2 с Grafana с помощью параметра конфигурации groups_attribute_path см. в разделе параметры конфигурации.
Чтобы узнать больше о синхронизации команд, см. Настройка синхронизации команд.
Пример синхронизации команд
Конфигурация:
groups_attribute_path = groups
Полезная нагрузка:
{
...
"groups": [
"engineers",
"analysts",
],
...
}
Параметры конфигурации
Следующая таблица описывает различные параметры конфигурации Generic OAuth. Вы можете применять эти параметры как переменные среды, как и любую другую конфигурацию в Grafana. Дополнительную информацию см. в разделе Переопределение конфигурации с помощью переменных среды.
Note
Если параметр конфигурации требует выражения JMESPath, которое содержит двоеточие, заключите всё выражение в кавычки, чтобы предотвратить ошибки разбора. Например
role_attribute_path: "role:view"
Примеры настройки Generic OAuth
В этом разделе приведены примеры настройки интеграции Generic OAuth.
Настройка OAuth2 с Descope
Чтобы настроить аутентификацию Generic OAuth с Descope, выполните следующие шаги:
-
Создайте проект Descope здесь и пройдите мастер начала работы, чтобы настроить свою аутентификацию. Вы можете пропустить этот шаг, если у вас уже настроен проект Descope.
-
Если вы хотите использовать поток, отличный от
Sign Up or In, перейдите в меню IdP Applications в консоли и выберите своё приложение IdP. Затем измените параметр запроса Flow Hosting URL?flow=sign-up-or-in, чтобы изменить id потока, который хотите использовать. -
Нажмите Save.
-
Обновите раздел
[auth.generic_oauth]файла конфигурации Grafana, используя значения со вкладки Settings:Note
Вы можете получить свой Client ID (Descope Project ID) в разделе Project Settings. Ваш Client Secret (Descope Access Key) можно сгенерировать в разделе Access Keys.
[auth.generic_oauth] enabled = true allow_sign_up = true auto_login = false team_ids = allowed_organizations = name = Descope client_id = <Descope Project ID> client_secret = <Descope Access Key> scopes = openid profile email descope.claims descope.custom_claims auth_url = https://api.descope.com/oauth2/v1/authorize token_url = https://api.descope.com/oauth2/v1/token api_url = https://api.descope.com/oauth2/v1/userinfo use_pkce = true use_refresh_token = true
Настройка OAuth2 с Auth0
Note
Поддержка функции “audience” Auth0 в настоящее время недоступна в Grafana. Для ролей и разрешений доступные варианты описаны здесь.
Чтобы настроить аутентификацию Generic OAuth с Auth0, выполните следующие шаги:
-
Создайте приложение Auth0 со следующими параметрами:
- Name: Grafana
- Type: Regular Web Application
-
Перейдите на вкладку Settings приложения и установите Allowed Callback URLs в
https://<grafana domain>/login/generic_oauth. -
Нажмите Save Changes.
-
Обновите раздел
[auth.generic_oauth]файла конфигурации Grafana, используя значения со вкладки Settings:[auth.generic_oauth] enabled = true allow_sign_up = true auto_login = false team_ids = allowed_organizations = name = Auth0 client_id = <client id> client_secret = <client secret> scopes = openid profile email offline_access auth_url = https://<domain>/authorize token_url = https://<domain>/oauth/token api_url = https://<domain>/userinfo use_pkce = true use_refresh_token = true
Настройка OAuth2 с Bitbucket
Чтобы настроить аутентификацию Generic OAuth с Bitbucket, выполните следующие шаги:
-
Перейдите в Settings > Workspace setting > OAuth consumers в BitBucket.
-
Создайте приложение, выбрав Add consumer и используя следующие параметры:
- Allowed Callback URLs:
https://<grafana domain>/login/generic_oauth
- Allowed Callback URLs:
-
Нажмите Save.
-
Обновите раздел
[auth.generic_oauth]файла конфигурации Grafana, используя значенияKeyиSecretиз описания consumer:[auth.generic_oauth] name = BitBucket enabled = true allow_sign_up = true auto_login = false client_id = <client key> client_secret = <client secret> scopes = account email auth_url = https://bitbucket.org/site/oauth2/authorize token_url = https://bitbucket.org/site/oauth2/access_token api_url = https://api.bitbucket.org/2.0/user teams_url = https://api.bitbucket.org/2.0/user/permissions/workspaces team_ids_attribute_path = values[*].workspace.slug team_ids = allowed_organizations = use_refresh_token = true
По умолчанию refresh-токен включается в ответ для Authorization Code Grant.
Настройка OAuth2 с OneLogin
Чтобы настроить аутентификацию Generic OAuth с OneLogin, выполните следующие шаги:
-
Создайте новый Custom Connector в OneLogin со следующими настройками:
- Name: Grafana
- Sign On Method: OpenID Connect
- Redirect URI:
https://<grafana domain>/login/generic_oauth - Signing Algorithm: RS256
- Login URL:
https://<grafana domain>/login/generic_oauth
-
Добавьте приложение в Connector Grafana:
- Display Name: Grafana
-
Обновите раздел
[auth.generic_oauth]файла конфигурации Grafana, используя client ID и client secret со вкладки SSO страницы сведений о приложении:Ваш домен OneLogin будет совпадать с URL, который вы используете для доступа к OneLogin.
[auth.generic_oauth] name = OneLogin enabled = true allow_sign_up = true auto_login = false client_id = <client id> client_secret = <client secret> scopes = openid email name auth_url = https://<onelogin domain>.onelogin.com/oidc/2/auth token_url = https://<onelogin domain>.onelogin.com/oidc/2/token api_url = https://<onelogin domain>.onelogin.com/oidc/2/me team_ids = allowed_organizations =
Настройка OAuth2 с Dex
Чтобы настроить аутентификацию Generic OAuth с Dex IdP, выполните следующие шаги:
-
Добавьте Grafana как клиента в YAML-файл конфигурации Dex:
staticClients: - id: <client id> name: Grafana secret: <client secret> redirectURIs: - 'https://<grafana domain>/login/generic_oauth'Note
В отличие от многих других провайдеров OAuth2, Dex не предоставляет
<client secret>. Вместо этого секрет можно сгенерировать, например, с помощьюopenssl rand -hex 20. -
Обновите раздел
[auth.generic_oauth]конфигурации Grafana:[auth.generic_oauth] name = Dex enabled = true client_id = <client id> client_secret = <client secret> scopes = openid email profile groups offline_access auth_url = https://<dex base uri>/auth token_url = https://<dex base uri>/token api_url = https://<dex base uri>/userinfo<dex base uri>соответствует конфигурацииissuer:в Dex (например, домен Dex, возможно, включающий путь, такой как/dex). Областьoffline_accessнеобходима при использовании refresh-токенов.