这是关于下一个《Grafana》的版本。有关最新的稳定版本,请转到最新版本

;设置;配置安全;配置身份验证;配置通用OAuth身份验证

配置通用OAuth身份验证

您可以使用通用OAuth2特性在Grafana中配置许多不同的OAuth2身份验证服务。例子:

这个回调URL必须与您在浏览器中访问Grafana时使用的完整HTTP地址匹配,但是要加上后缀路径/登录/ generic_oauth

您可能需要设置root_url选择(服务器)回调URL是否正确。例如,如果你在代理的背后服务Grafana。

示例配置:

(auth.generic_oauth)name = OAuth icon = signin enabled = true client_id = YOUR_APP_CLIENT_ID client_secret = YOUR_APP_CLIENT_SECRET scopes = empty_scopes = false auth_url = token_url = api_url = allowed_domains = mycompany.com mycompany.org allow_sign_up = true tls_skip_verify_insecure = false tls_client_cert = tls_client_key = tls_client_ca = use_pkce = true auth_style =

api_url返回的资源OpenID用户信息兼容的信息。

您还可以指定客户端使用的SSL/TLS配置。

  • tls_client_cert到证书的路径。
  • tls_client_key到包含该键的路径。
  • tls_client_ca到包含受信任证书颁发机构列表的路径。

tls_skip_verify_insecure控制客户端是否验证服务器的证书链和主机名。如果为真,则SSL/TLS接受服务器提供的任何证书以及该证书中的任何主机名。您应该只将其用于测试,因为这种模式使SSL/TLS容易受到中间人攻击。

auth_style控制这OAuth2 AuthStyle当从OAuth提供者请求令牌时使用。它决定了client_id而且client_secret发送给Oauth提供商。可用值为自动检测InParams而且InHeader.默认情况下,自动检测使用。

empty_scopes为true,则在身份验证期间使用空范围。默认情况下,Grafana使用用户:电子邮件范围。

电子邮件地址

Grafana通过查询OAuth提供者来确定用户的电子邮件地址,直到它找到一个电子邮件地址:

  1. 方法检查是否存在电子邮件地址电子邮件编码在OAuth中的字段id_token参数。
  2. 方法检查是否存在电子邮件地址JMESPath通过email_attribute_path配置选项。路径查找使用的JSON是通过查询UserInfo端点获得的HTTP响应api_url配置选项。请注意:仅在Grafana v6.4+中可用。
  3. 类型中是否存在电子邮件地址属性在OAuth中编码的映射id_token参数。默认情况下,Grafana将使用属性映射执行查找电子邮件:主键,但是,这是可配置的,可以使用email_attribute_name配置选项。
  4. 查询/电子邮件OAuth提供者的API的端点(使用api_url),然后检查是否存在标记为主要地址的电子邮件地址。
  5. 如果在步骤(1-4)中没有找到电子邮件地址,则将用户的电子邮件地址设置为空字符串。

小组/团队

类似地,组映射是使用JMESPathgroups_attribute_path配置选项。的id_token首先尝试,然后是api_url.JMESPath表达式的结果应该是组的字符串数组。

此外,Grafana将检查通过指定的至少一个团队的存在team_ids配置选项,使用JMESPath通过team_ids_attribute_path配置选项。路径查找使用的JSON是通过查询通过teams_url配置选项(使用/团队作为备用端点)。结果应该是一个由Grafana Team id组成的字符串数组。使用这个设置可以确保只有特定的团队被允许使用OAuth提供者向Grafana进行身份验证。

登录

使用自定义用户登录login_attribute_path配置选项。操作顺序如下:

  1. Grafana评估login_attribute_path针对ID令牌的JMESPath表达式。
  2. 如果Grafana没有找到值,那么Grafana将根据从UserInfo端点获得的JSON数据计算表达式。UserInfo端点URL在api_url配置选项。

属性可以自定义用于从返回的OAuth令牌中提取ID令牌的属性名id_token_attribute_name选择。

类在JMESPath中设置用户的显示名称name_attribute_path配置选项。它的运作方式与login_attribute_path选择。

注意:name_attribute_path在Grafana 7.4+中可用。

PKCE

在Grafana v8.3和更高版本中可用。

IETF的RFC 7636引入“代码交换证明密钥”(PKCE),为某些形式的授权代码拦截攻击提供额外保护。PKCE将被要求OAuth 2.1

您可以通过设置在Grafana中启用PKCEuse_pkce真正的(auth.generic_oauth)部分。

Use_pkce = true

Grafana总是使用基于SHA256的S256挑战方法和一个128字节(base64url编码)的代码验证器。

配置刷新令牌

在Grafana v9.3及更高版本中可用。

注意:这个特性的背后accessTokenExpirationCheck功能切换。

当用户使用OAuth提供程序登录时,Grafana会验证访问令牌是否过期。当一个访问令牌过期时,Grafana使用提供的刷新令牌(如果存在的话)来获取一个新的访问令牌。

Grafana使用一个刷新令牌来获得一个新的访问令牌,而不需要用户再次登录。如果刷新令牌不存在,Grafana会在访问令牌过期后将用户从系统中注销。

若要配置通用OAuth以使用刷新令牌,请执行以下一项或两项任务(如果需要):

  • 扩展(auth.generic_oauth)具有其他作用域的部分
  • 在提供程序上启用刷新令牌

使用Auth0设置OAuth2

  1. 使用如下参数在Auth0中创建客户端:

    • 名称:Grafana
    • 类型:普通Web应用程序
  2. 进入设置选项卡并设置:

    • 允许的回调url:https:// < grafana域> /登录/ generic_oauth
  3. 单击Save Changes,然后使用页面顶部的值来配置Grafana:

    (auth.generic_oauth)enabled = true allow_sign_up = true team_ids = allowed_organizations = name = Auth0 client_id =  client_secret =  scopes = openid profile email offline_access auth_url = https:///authorize token_url = https:///oauth/token api_url = https:///userinfo use_pkce = true

用Bitbucket设置OAuth2

(auth.generic_oauth)name = BitBucket enabled = true allow_sign_up = true client_id =  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 =

的响应中包含刷新令牌授权代码授予

使用Centrify设置OAuth2

  1. 在Centrify仪表板中创建一个新的自定义OpenID Connect应用程序配置。

  2. 创建一个可记忆的唯一应用程序ID,例如“grafana”,“grafana_aws”等。

  3. 输入其他基本配置(名称、描述、logo、类别)

  4. 在Trust选项卡上,生成一个长密码,并将其放入OpenID Connect Client Secret字段。

  5. 将Grafana实例首页的URL放到“Resource Application URL”字段中。

  6. 添加一个授权的重定向URI,如https://your-grafana-server/login/generic_oauth

  7. 设置权限,策略等,就像任何其他Centrify应用程序

  8. 配置Grafana的步骤如下:

    (auth.generic_oauth)name = Centrify enabled = true allow_sign_up = true client_id =  client_secret = .my.centrify.com/OAuth2/Authorize/ token_url = https://.my.centrify.com/OAuth2/Token/ api_url = https://.my.centrify.com/OAuth2/UserInfo/

的响应中包含刷新令牌授权代码授予

使用OneLogin设置OAuth2

  1. 用以下设置创建一个新的自定义连接器:

    • 名称:Grafana
    • 登录方法:OpenID连接
    • 重定向URI:https:// < grafana域> /登录/ generic_oauth
    • 签名算法:RS256
    • 登录网址:https:// < grafana域> /登录/ generic_oauth

    然后:

  2. 添加一个应用到Grafana连接器:

    • 显示名称:Grafana

    然后:

  3. 在Grafana App细节页面的SSO选项卡下,你会发现客户端ID和客户端秘密。

    您的OneLogin域将与您用于访问OneLogin的URL匹配。

    配置Grafana的步骤如下:

    (auth.generic_oauth)name = OneLogin enabled = true allow_sign_up = true client_id =  client_secret =  scopes = openid email name auth_url = https://.onelogin.com/oidc/2/auth token_url = https://.onelogin.com/oidc/2/token api_url = https://.onelogin.com/oidc/2/me team_ids = allowed_organizations =

角色映射

属性检查角色是否存在JMESPath通过role_attribute_path配置选项。JMESPath应用于id_token第一。方法指定的UserInfo端点api_url接下来尝试配置选项。评价后的结果role_attribute_pathJMESPath表达式应该是一个有效的Grafana角色,例如,查看器编辑器管理

有关更多信息,请参阅JMESPath例子

警告:目前如果没有找到用户的组织角色映射,Grafana不会更新用户的组织角色。这将在Grafana 10中改变。为避免覆盖手动设置的角色,请启用oauth_skip_org_role_update_sync选择。看到configure-grafana获取更多信息。

在第一次登录时,如果role_attribute_path属性不返回角色,则为用户分配指定的角色auto_assign_org_role选项.您可以通过设置禁用此默认角色分配Role_attribute_strict = true.如果没有返回角色或返回无效角色,则拒绝用户访问。

警告:使用Grafana 10,每次登录时,如果role_attribute_path属性不返回角色,则为用户分配指定的角色auto_assign_org_role选项

JMESPath例子

映射用户组织角色

为了简化正确的JMESPath表达式的配置,您可以在http://jmespath.org/

基本的例子:

在下面的例子中,user将得到编辑器身份验证时作为角色。财产的价值角色如果角色是一个合适的Grafana角色,则将是结果角色。查看器编辑器管理

有效载荷:

{…“角色”:“编辑”,…}

配置:

Role_attribute_path =角色

先进的例子:

在下面的例子中,user将得到管理身份验证时作为角色,因为它有一个角色管理.如果用户有角色编辑器它会得到编辑器作为角色,否则查看器

有效载荷:

{…"info":{…“角色”:[“工程师”,“管理员”,],…},……}

配置:

Role_attribute_path = contains(info. properties)角色s[*], 'admin') && 'Admin' || contains(info.roles[*], 'editor') && 'Editor' || 'Viewer'

地图服务器管理员权限

在Grafana v9.2及更高版本中可用。

如果Grafana接收到的应用角色为GrafanaAdmin, Grafana授予用户服务器管理员权限。
如果您想将服务器管理员特权授予用户的子集,这很有用。
Grafana还为用户分配管理默认组织的角色。

设置allow_assign_grafana_admin(auth.generic_oauth)必须设置为真正的这样才能奏效。
如果设置为时,用户被分配的角色为管理默认组织的权限,而不是服务器管理员权限。

Allow_assign_grafana_admin = true

例子:

Role_attribute_path = contains(info. properties)角色s[*], 'admin') && 'GrafanaAdmin' || contains(info.roles[*], 'editor') && 'Editor' || 'Viewer'

团队同步

在Grafana Enterprise v8.1及更高版本中可用。

使用Team Sync,您可以将您的Generic OAuth组映射到Grafana中的团队,以便用户自动添加到正确的团队。

通用OAuth组可以通过组ID引用,例如fba bab1c86 8 - 8 - 33 - e5 - 2089 - 1 - d1c80ec267d麦田

了解更多关于Team Sync的信息

配置:

Groups_attribute_path = info.groups

有效载荷:

{…"info":{…"groups": ["engineers", "analysts",],…},……}