本文介绍了如何通过阿里云IDaaS实现Grafana用户与角色的单点登录(SSO)。内容包括Grafana的Docker环境部署、IDaaS中OIDC应用的创建与配置、Grafana的OAuth集成步骤,以及角色映射和SSO功能验证。通过本指南,您可快速完成Grafana与IDaaS的对接,实现安全便捷的统一身份认证与权限管理。
一、安装Grafana
步骤一:环境准备
# 检查Docker版本并验证是否安装成功
docker --version步骤二:获取镜像
# 拉取Grafana 9.3.2版本镜像
docker pull grafana/grafana:9.3.2步骤三:配置Grafana数据目录与初始化文件
创建Grafana目录并设置权限
# 创建Grafana所需的目录结构并设置权限 mkdir -p /opt/grafana/{data,plugins,config} && \ chmod -R 777 /opt/grafana/{data,plugins,config}准备配置文件
# 创建临时容器拷贝配置文件后自动清理 docker run --rm --name grafana-tmp -d -p 3000:3000 grafana/grafana:9.3.2 && \ docker cp grafana-tmp:/etc/grafana/grafana.ini /opt/grafana/config/grafana.ini && \ docker stop grafana-tmp # 按需编辑配置文件 # vim /opt/grafana/config/grafana.ini
步骤四:启动容器
docker run -d \ # 启动容器
--name grafana \ # 容器命名为grafana
--restart unless-stopped \ # 自动重启策略(除非手动停止)
-p 3000:3000 \ # 映射容器3000端口到主机3000端口
--user "$(id -u):$(id -g)" \ # 使用当前用户权限运行,增强安全性
-v /etc/localtime:/etc/localtime:ro \ # 同步主机时间配置(只读)
-v /opt/grafana/data:/var/lib/grafana \ # 持久化存储grafana数据
-v /opt/grafana/plugins:/var/lib/grafana/plugins \ # 持久化存储插件
-v /opt/grafana/config/grafana.ini:/etc/grafana/grafana.ini \ # 使用自定义配置文件
-e GF_SECURITY_ADMIN_PASSWORD=<your password> \ # 设置密码
-e GF_PATHS_CONFIG=/etc/grafana/grafana.ini \ # 明确指定配置文件路径
-e GF_PATHS_DATA=/var/lib/grafana \ # 明确指定数据目录
-e GF_PATHS_PLUGINS=/var/lib/grafana/plugins \ # 明确指定插件目录
grafana/grafana:9.3.2 # 使用特定版本镜像步骤五:服务验证
访问Grafana登录页面。在浏览器地址栏输入http://服务器IP地址:端口号(例如http://192.168.1.100:3000),进入Grafana登录界面。输入注册的邮箱或用户名和密码,点击Log in完成登录。

二、在IDaaS中创建OIDC应用
在阿里云IDaaS中创建标准协议的OIDC应用,您需要按照以下步骤操作:
登录到阿里云IDaaS EIAM控制台,进入实例页面。
在左侧导航栏,选择。
单击标准协议标签页,并在OIDC卡片中点击添加应用。
在弹出的添加应用- OIDC协议对话框中,输入应用名称并点击立即添加以创建应用。
创建完成后,在OIDC应用详情页面,选择。
在登录 Redirect URI中,请将 Redirect URI 设置为
http://${***********}/login/generic_oauth。请确保将${}替换为您的实际服务地址(如域名或 IP)。展开显示高级配置,选择需要获取的用户信息范围,然后保存配置。
在部分,点击添加授权,为之前创建的用户授权,然后保存授权。
完成上述步骤后,您需要记录当前应用的client_id、client_secret、授权端点、令牌端点、用户信息端点等配置信息,这些信息将在后续配置单点登录时使用。确保妥善保存这些信息,因为它们是Grafana应用与IDaaS之间建立信任关系的关键。
三、Grafana 配置 OAuth 与阿里云 IDaaS 集成
IDaas EIAM侧
您需要从IDaaS获取两部分关键信息,将其提供给Grafana进行配置。
获取client_id和client_secret。在通用配置标签页面中查看并记录您的client_id和client_secret认证凭证信息。

获取请求端点。切换到标签页,在页面下方获取三个字段:
授权端点
令牌端点
用户信息端点

在标签页中,填写登录 Redirect URI(此处重定向URI为Grafana的访问地址)。

标签页中,填写扩展 id_token,使用表达式:ArrayMap(user.groups, __item.groupName)。

Grafana应用侧
修改Grafana配置。
重要请提前确认令牌端点(token_url)和用户信息端点(api_url)与应用服务器的网络互通性。
进入Grafana配置文件目录。
cd /opt/grafana/config修改grafana.ini配置文件。找到generic_oauth配置,修改以下配置,其他字段无需变更。详情请参见:配置通用 OAuth 身份验证。
# generic_oauth配置 [auth.generic_oauth] # 是否启用通用OAuth认证,必须为 true enabled = true # 显示名称(会出现在登录按钮上) name = AliCloud IDaaS # 是否允许新用户通过 OAuth 注册 allow_sign_up = true # 在IDaaS获取的客户端标识(必填) client_id =app_****** # 在IDaaS获取的客户端密钥(敏感信息,需妥善保管) client_secret =CS4gno67**********h3V5uNYp3W1CQW767WZ7ewjZKehe # IDaaS 的授权端点,用户认证和授权请求地址 auth_url =https://of5mhrcn.aliyunidaas.com/login/app/app_******/oauth2/authorize # IDaaS 的令牌端点,用于获取access_token和id_token token_url =https://eiam-api-cn-hangzhou.aliyuncs.com/v2/idaas_******/app_******/oauth2/token # IDaaS 的用户信息端点, 用于获取用户基本信息 api_url =https://eiam-api-cn-hangzhou.aliyuncs.com/v2/idaas_******/app_******/oauth2/userinfo # 获取邮箱节点JMEpath email_attribute_path=data.email # 必要的权限范围 scopes = openid,profile,email,phone #如果需要将 IDaaS 中的用户角色映射到 Grafana 角色,可以添加: role_attribute_path = contains(roles[*], 'admin') && 'GrafanaAdmin' || contains(roles[*], 'editor') && 'Editor' || 'Viewer' #允许将IDaaS管理员映射为Grafana超级用户 allow_assign_grafana_admin = true [server] # 这里的root_url需要修改为真实的地址,因为授权回调的redirect_uri是这个 grafana地址 root_url =http://60.***.***.144:3000重要role_attribute_path可根据实际需求具体配置,详情请参见:配置角色映射。
所有包含 ****** 的配置值都需要替换为从阿里云IDaaS获取的实际值。
角色映射(role_attribute_path)规则说明:
roles[*]:表示从用户的属性中提取一个名为roles的数组(通常是 OAuth 或 LDAP 返回的用户角色列表)。contains(roles[*], 'admin'):检查roles数组中是否包含值为'admin'的元素。如果
roles数组中包含'admin',则将用户角色设置为'GrafanaAdmin'(即 Grafana 超级管理员)。如果
roles数组中不包含'admin',但包含'editor',则将用户角色设置为'Editor'(即编辑者权限)。如果
roles数组中既不包含'admin'也不包含'editor',则将用户角色设置为'Viewer'(即查看者权限)。
重启grafana服务。请在修改配置后保存,并执行重启Grafana服务的操作以确保新配置生效。
docker restart grafana
四、验证Grafana SSO
用户SSO
在Grafana登录页面单击Sign in with AllCloud IDaaS按钮。若当前未登录IDaaS账户,系统会自动跳转至IDaaS登录页面。完成身份验证后,您将自动登录Grafana系统。
重要若未显示SSO登录选项,需确认Grafana配置文件中已正确启用 IDaaS作为认证提供商。

角色SSO
在IDaaS创建不同角色组,将需要授权的用户添加到组即可。
在IDaaS中为用户分配不同角色组(如
admin、editor、viewer)。
将组授权给在IDaaS中创建OIDC应用。
使用不同角色的用户通过SSO登录Grafana。
检查用户权限是否符合预期:
Admin用户:应拥有Grafana超级管理员权限(可管理数据源、用户等)。
Editor用户:可创建和编辑仪表盘,但无法管理用户。
Viewer用户:仅可查看仪表盘。
若角色映射异常,检查
grafana.ini中的role_attribute_path配置,确保表达式与IDaaS返回的角色属性匹配。
Grafana采用OAuth 2.0协议实现单点登录(SSO),但仅支持由Grafana服务提供商(SP)发起的SSO流程,不支持由身份提供商(IdP)发起的SSO。在使用SSO功能前,请确保您的IDaaS账户名与Grafana用户名保持一致。若账户名不一致,您需要在IDaaS中配置账户关联关系,或在Grafana中创建对应的新用户。