Аутентификация с единым входом в Django и Grafana - PullRequest
0 голосов
/ 06 марта 2019

Я использую grafana iframes на своей HTML-странице, работающей на k, но каждый раз, когда я открываю свою страницу для просмотра встроенных графиков, мне нужно получить доступ к 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

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

Конфигурация Графана

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

I 'я получаю эту ошибку при доступе к URL:

Если вы видите, что Grafana не удалось загрузить файлы приложения

  1. Это может быть вызванонастройками обратного прокси-сервера.

  2. Если вы размещаете grafana в подпути, убедитесь, что ваш grafana.ini параметр root_path включает подпуть

  3. Если выиметь локальную разработку, убедитесь, что вы строите интерфейс, используя: npm run dev, npm run watch или npm run build

  4. Иногда перезапускг grafana-server может помочь

1 Ответ

0 голосов
/ 07 марта 2019

спасибо, что связались со мной также по электронной почте.

Ради полноты я пересылаю здесь ответ, который я дал на оригинальное сообщение в 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. что такое атрибут "src" вашего iframe?Это должно быть 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

Конфигурация Графана:

[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/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...