在Django和Grafana上的单点登录身份验证

时间:2019-03-06 16:25:58

标签: python django

我在以k运行的HTML页面中使用grafana iframes,但是每次打开页面查看嵌入的图形时,我都需要访问grafana并因此登录以验证我的用户Django应用程序已经有一个登录页面,我只想在页面上使用一个登录名并向grafana发送代理请求,因此我每次打开应用程序时都不需要执行两次登录

查看

class GraphanaProxyView(ProxyView):
    upstream = 'http://172.30.3.141:3000/'

    def get_proxy_request_headers(self, request):
       headers = super(GraphanaProxyView, self).get_proxy_request_headers(request)
       headers['X-WEBAUTH-USER'] = request.user.username
       return headers

网址

url(r'^grafana/(?P<path>.*)$', views.GraphanaProxyView.as_view(), name='graphana-dashboards'),

配置Grafana

grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - "./grafana/datastore:/var/lib/grafana"

    environment:
      - GF_SMTP_ENABLED=true  
      - GF_SMTP_HOST=smtp.gmail.com:587
      - GF_SMTP_USER=user@domain.com.br
      - GF_SMTP_PASSWORD=password
      - GF_SMTP_FROM_NAME=Grafana Snipped
      - GF_SMTP_SKIP_VERIFY=true


      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_NAME=View
      - GF_AUTH_ANONYMOUS_ORG_ROLE=View
      - GF_USERS_ALLOW_SIGN_UP=false

      - GF_AUTH_PROXY_ENABLED=true
      - GF_AUTH_PROXY_HEADER_NAME = X-WEBAUTH-USER
      - GF_AUTH_PROXY_HEADER_PROPERTY=username       
      - GF_AUTH_PROXY_AUTO_SIGN_UP=true 
      - GF_AUTH_PROXY_LDAP_SYNC_TTL=60
      - GF_AUTH_PROXY_WHITELIST = 172.30.3.207
      - GF_SERVER_DOMAIN = 172.30.3.141

访问URL时出现此错误:

  

如果您看到此Grafana无法加载其应用程序文件

  1. 这可能是由于您的反向代理设置引起的。

  2. 如果您将grafana托管在子路径下,请确保您的grafana.ini root_path设置包括子路径

  3. 如果您有本地开发人员,请确保使用npm run devnpm run watchnpm run build

  4. 构建前端
  5. 有时重新启动grafana-server会有所帮助

1 个答案:

答案 0 :(得分:0)

也感谢您通过电子邮件与我联系。

出于完整性考虑,我在此处重新发布了我对葡萄牙Stackoverflow原始帖子的回答:https://pt.stackoverflow.com/questions/362727/autentica%C3%A7%C3%A3o-single-sign-on-django-e-grafana

您的报告即将完成,太好了!

给出警告

This setting is also important if you have a reverse proxy in front of Grafana that exposes it through a subpath. In that case add the subpath to the end of this URL setting.

http://docs.grafana.org/installation/configuration/#root-url

错误可能是GF_SERVER_DOMAIN envvar的设置,应该用保存端口的GF_SERVER_ROOT_URL=http://172.30.3.141:3000/替换(这将意味着Grafana文档的错误……)

如果不是这样,我只会想到另外两个问题来确定问题:

  1. 您的request.user.username是否与Grafana用户名匹配?
  2. 您的iframe的“ src”属性是什么?它必须是https://172.30.3.207/grafana/(dashboard path)

除了这个基本问题外,我建议您尝试删除GF_AUTH_PROXY_WHITELIST envvar,并尝试通过curl进行身份验证,例如:

curl -H "X-WEBAUTH-USER: anthony" http://172.30.3.141:3000/api/user

您可以在http://docs.grafana.org/auth/auth-proxy/#interacting-with-grafana-s-authproxy-via-curl

中找到

遵循我的Django视图和grafana配置以达到工作结果,但没有发现有意义的差异:

class GraphanaProxyView(ProxyView):
upstream = 'http://localhost:8891/dashboard/'

def get_proxy_request_headers(self, request):
    headers = super(GraphanaProxyView, self).get_proxy_request_headers(request)
    headers['X-WEBAUTH-APP-USER'] = request.user.username
    return header

Grafana配置:

[auth]
disable_login_form = true

[auth.proxy]
enabled = true
header_name = X-WEBAUTH-APP-USER
;header_property = username
;auto_sign_up = true
;ldap_sync_ttl = 60
whitelist = 127.0.0.1

[auth.basic]
enabled = false


[server]
protocol = http
http_addr = 127.0.0.1
http_port = 8891

domain = solomon.labs.befair.it
;enforce_domain = false
root_url = https://%(domain)s/ui/