配置身份验证
Grafana 提供了多种身份验证用户的方式。一些身份验证集成还支持同步用户权限和组织成员身份。
下表列出了所有支持的身份验证方法及其可用功能。团队同步和主动同步仅在 Grafana Enterprise 中可用。
身份验证方法 | 多组织映射 | 强制同步 | 角色映射 | Grafana 管理员映射 | 团队同步 | 允许的组 | 主动同步 | 跳过组织角色映射 | 自动登录 | 单点登出 |
---|---|---|---|---|---|---|---|---|---|---|
匿名访问 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
身份验证代理 | 否 | 是 | 是 | 否 | 是 | 否 | 不适用 | 否 | 不适用 | 不适用 |
Azure AD OAuth | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 是 | 是 | 是 |
基本身份验证 | 是 | 不适用 | 是 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
无密码身份验证 | 是 | 不适用 | 是 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
通用 OAuth | 是 | 是 | 是 | 是 | 是 | 否 | 不适用 | 是 | 是 | 是 |
GitHub OAuth | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 是 | 是 | 是 |
GitLab OAuth | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 是 | 是 | 是 |
Google OAuth | 是 | 否 | 否 | 否 | 是 | 否 | 不适用 | 否 | 是 | 是 |
Grafana.com OAuth | 否 | 否 | 是 | 否 | 不适用 | 不适用 | 不适用 | 是 | 是 | 是 |
Okta OAuth | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 是 | 是 | 是 |
SAML (仅限 Enterprise) | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 是 | 是 | 是 |
LDAP | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 不适用 | 不适用 |
JWT 代理 | 否 | 是 | 是 | 是 | 否 | 否 | 不适用 | 否 | 不适用 | 不适用 |
字段解释
多组织映射:能够添加用户并将角色映射到多个组织
强制同步:如果身份提供者提供的信息为空,集成是跳过设置该用户字段还是强制使用默认值。
角色映射:能够映射用户在默认组织中的角色
Grafana 管理员映射:能够映射用户在默认组织中的管理员角色
团队同步:能够从 IdP 中预定义的组/团队同步团队
允许的组:仅允许特定组的成员登录
主动同步:无需用户登录即可将用户添加到团队并更新其个人资料
跳过组织角色同步:能够修改用户的组织角色,并且不同步回 IdP
自动登录:如果用户未登录,自动重定向到提供者登录页面 * 仅适用于 OAuth;仅当这是唯一配置的提供者时有效
单点登出:从 Grafana 登出也会使你在提供者的会话失效
配置多个身份提供者
Grafana 允许你配置多个身份验证提供者,但不能配置相同类型的身份验证提供者两次。例如,你可以同时配置 SAML(仅限 Enterprise)和 通用 OAuth,但不能配置两个不同的 通用 OAuth。
注意:Grafana 不支持多个身份提供者解析同一个用户。请确保不同提供者之间的用户账户没有重叠
在你有多个相同类型身份提供者的情况下,有几种选择
- 使用不同的 Grafana 实例,每个实例配置一个特定的身份提供者。
- 检查身份提供者是否支持账户联合。如果支持,你只需配置一次,然后让你的身份提供者联合来自不同提供者的账户。
- 如果身份提供者支持 SAML,你可以配置一个 通用 OAuth 和一个 SAML(仅限 Enterprise)。
使用相同的电子邮件地址通过不同的身份提供者登录
如果用户想使用相同的电子邮件地址通过多个身份提供者登录(例如,Grafana.Com OAuth 和 Google OAuth),你可以配置 Grafana 使用电子邮件地址作为用户的唯一标识符。这可以通过启用 oauth_allow_insecure_email_lookup
选项来实现,该选项默认禁用。请注意,启用此选项可能会降低 Grafana 实例的安全性。如果你启用此选项,还应确保正确配置了 Allowed organization
、Allowed groups
和 Allowed domains
设置,以防止未经授权的访问。
要启用此选项,请参阅启用电子邮件查找部分。
注意
多因素身份验证 (MFA/2FA)
Grafana 和 Grafana Cloud 门户目前不包含内置的多因素身份验证 (MFA) 支持。
我们强烈建议集成支持 MFA 的外部身份提供者 (IdP),例如 Okta、Azure AD 或 Google Workspace。通过将你的 Grafana 实例配置为使用外部 IdP,你可以有效地利用 MFA 来保护你的账户和资源。
登录和短期令牌
以下内容适用于使用 Grafana 基本身份验证、LDAP(不带身份验证代理)或 OAuth 集成的情况。
Grafana 使用短期令牌作为验证已身份验证用户的机制。这些短期令牌会根据 token_rotation_interval_minutes
指定的间隔为活跃的已身份验证用户进行轮换。
不活跃的已身份验证用户将在 login_maximum_inactive_lifetime_duration
指定的持续时间内保持登录状态。这意味着用户可以关闭 Grafana 窗口并在 当前时间 + login_maximum_inactive_lifetime_duration
之前返回以继续其会话。只要自上次用户登录以来的时间小于 login_maximum_lifetime_duration
,此规则就有效。
SSO 会话处理
使用 SSO(单点登录)身份验证方法时,Grafana 根据配置以不同方式处理会话
- OAuth/OpenID Connect
- 不使用刷新令牌(默认)
- Grafana 创建一个会话,有效期最长为
login_maximum_lifetime_duration
(默认:30 天)。
- 在此期间,即使用户在 IdP 上失去访问权限,会话仍然有效。
- 启用刷新令牌后
- 用户接收到一个 JWT 刷新令牌。当 JWT 过期并使用刷新令牌获取新令牌时,Grafana 将重新验证在 IdP 上的访问权限。
SAML
- 如果用户已被从所需组中移除或访问权限已被撤销,刷新将失败并且会话将失效。
- SAML 身份验证成功后,Grafana 会创建一个具有默认会话生命周期的会话。
- 如果 SAML 单点登出 (SLO) 配置正确,当用户在 IdP 端被撤销访问权限时,会话将失效。
设置
如果 SAML 单点登出 (SLO) 配置正确,当用户在 IdP 端被撤销访问权限时,会话将失效。有关配置 SAML 和 SLO 的更多信息,请参阅 SAML 配置文档。
[auth]
# Login cookie name
login_cookie_name = grafana_session
# The maximum lifetime (duration) an authenticated user can be inactive before being required to login at next visit. Default is 7 days (7d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). The lifetime resets at each successful token rotation (token_rotation_interval_minutes).
login_maximum_inactive_lifetime_duration =
# The maximum lifetime (duration) an authenticated user can be logged in since login time before being required to login. Default is 30 days (30d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month).
login_maximum_lifetime_duration =
# How often should auth tokens be rotated for authenticated users when being active. The default is every 10 minutes.
token_rotation_interval_minutes = 10
# The maximum lifetime (seconds) an API key can be used. If it is set all the API keys should have limited lifetime that is lower than this value.
api_key_max_seconds_to_live = -1
# Enforce user lookup based on email instead of the unique ID provided by the IdP.
oauth_allow_insecure_email_lookup = false
扩展身份验证设置
启用电子邮件查找
默认情况下,Grafana 根据身份提供者 (IdP) 提供的唯一 ID 识别用户。但在某些情况下,通过电子邮件启用用户查找是可行的选择,例如当
- 身份提供者是单租户设置。
- IdP 提供唯一、已验证且不可编辑的电子邮件。
- 基础设施允许基于电子邮件的身份识别而不损害安全性。
重要提示:虽然可以将 Grafana 配置为允许基于电子邮件的用户查找,但由于潜在的安全风险,在大多数情况下我们强烈不建议采用此方法。如果你仍然选择继续,可以应用以下配置来启用电子邮件查找。
[auth]
oauth_allow_insecure_email_lookup = true
你也可以使用 API 启用电子邮件查找
注意
自 Grafana v10.4 起在 Grafana Enterprise 和 Grafana Cloud 中可用。
curl --request PUT \
--url http://{slug}.grafana.com/api/admin/settings \
--header 'Authorization: Bearer glsa_yourserviceaccounttoken' \
--header 'Content-Type: application/json' \
--data '{ "updates": { "auth": { "oauth_allow_insecure_email_lookup": "true" }}}'
最后,你还可以通过导航到 管理 -> 身份验证 -> 身份验证设置 在 UI 中启用它。
自动 OAuth 登录
设置为 true 可自动尝试使用特定的 OAuth 提供者登录,跳过登录屏幕。如果配置了多个身份验证提供者使用自动登录,此设置将被忽略。默认为 false
。
[auth.generic_oauth]
auto_login = true
避免自动登录
disableAutoLogin=true
URL 参数允许用户在错误的配置更改阻止正常登录功能的情况下绕过自动登录功能。当你需要访问登录屏幕来排除故障和修复错误配置时,此功能特别有用。
如何使用
- 将
disableAutoLogin=true
添加为你的 Grafana URL 的查询参数。- 示例:
grafana.example.net/login?disableAutoLogin=true
或grafana.example.net/login?disableAutoLogin
- 示例:
- 这将把你重定向到标准登录屏幕,绕过自动登录机制。
- 修复所有配置问题并测试你的登录设置。
此功能适用于 OAuth 和 SAML。请确保在修复问题后,移除参数或还原配置以重新启用自动登录功能(如果需要)。
隐藏退出菜单
将以下详细选项设置为 true 可隐藏退出菜单链接。如果你使用身份验证代理或 JWT 身份验证,此功能很有用。
[auth]
disable_signout_menu = true
退出后重定向 URL
用户从 Grafana 退出后重定向到的 URL。例如,这可用于从 OAuth 提供者登出。
通用 OAuth 示例
[auth.generic_oauth]
signout_redirect_url =
远程登出
你可以通过移除个人资料页面底部的登录会话来从其他设备登出。如果你是 Grafana 管理员用户,也可以从服务器管理员 / 编辑用户视图中对任何用户执行相同操作。
受保护的角色
注意
在 Grafana Enterprise 和 Grafana Cloud 中可用。
默认情况下,配置授权提供者后,Grafana 会将现有用户纳入新的身份验证方案。例如,如果你创建了一个使用基本身份验证的用户,其登录名为 jsmith@example.com
,然后设置 SAML 身份验证,其中 jsmith@example.com
是一个账户,那么如果该用户执行 SAML 登录,其身份验证类型将更改为 SAML。
你可以使用 protected_roles
属性禁用特定角色的用户采用
[auth.security]
protected_roles = server_admins org_admins
protected_roles
的值应为要保护的角色列表,用空格分隔。有效角色包括 viewers
、editors
、org_admins
、server_admins
和 all
(其他角色的超集)。