Grafana集成PingID OAuth SSO:仅指定组用户登录的配置问题
问题描述
已通过OAuth与PingID成功实现Grafana的SSO功能,Access Token可返回用户所属全部组信息。现需仅允许mydomain_Monitoring_Portal组员工通过SSO登录Grafana,尝试在grafana.ini中配置:
groups_attribute_path = memberOf[?contains(@, 'mydomain_Monitoring_Portal') == `true`]
但配置未生效,其他组成员仍可登录。
返回的Token数据(修正语法错误后)
{ "scope": [], "client_id": "xxx-xxx-xxx-xxx-xxx", "firstName": "myname", "LastName": "lastname", "emailAddress": "abc@gmail.com", "memberOf": [ "CN=mydomain_Monitoring_Portal,OU=xyz,OU=SecurityGroup,DC=fiat,DC=com", "CN=Monitoring,OU=abc,OU=Secret,DC=fiat,DC=com", "CN=service,OU=def,OU=mount,DC=fiat,DC=com" ], "userType": "Employee", "userId": "nb656", "username": "n656", "exp": 167895258 }
Scope设置:openid email profile
解决方案
方案1:Grafana侧配置组白名单
groups_attribute_path仅用于从OAuth返回数据中提取Grafana组信息,不做登录权限校验。要限制登录,需添加allowed_groups参数并关闭自动注册:
[auth.generic_oauth] enabled = true client_id = xxx-xxx-xxx-xxx-xxx client_secret = your_secret scopes = openid email profile auth_url = https://your-pingid-auth-url/authorize token_url = https://your-pingid-token-url/token api_url = https://your-pingid-api-url/userinfo # 保持组路径配置以正确识别目标组 groups_attribute_path = memberOf[?contains(@, 'mydomain_Monitoring_Portal') == `true`] # 指定仅允许登录的组(若提取的是完整DN,需填写完整字符串) allowed_groups = mydomain_Monitoring_Portal # 禁止非白名单用户自动注册登录 allow_sign_up = false
方案2:PingID侧配置组过滤(更安全)
直接在PingID控制台的OAuth应用中设置访问控制,仅允许mydomain_Monitoring_Portal组用户获取Token:
- 登录PingID管理后台,找到对应Grafana OAuth应用;
- 在应用权限/访问控制模块添加规则,限定仅该组用户可访问;
- 保存后,非目标组用户会被PingID直接拦截,无法进入Grafana流程。
原配置失效原因
groups_attribute_path的作用是映射用户组到Grafana内部组,用于分配平台内权限,而非控制用户是否能登录。所以即使配置了该参数,其他组用户仍可完成SSO登录,只是Grafana内不会为其分配目标组权限。
内容的提问来源于stack exchange,提问作者linuxadmin
相关产品推荐
相关产品推荐

