问题:
我正在尝试在本地设置以下配置[nginx] <-> [oauth2_proxy] <-> [grafana]
nginx
在80
上侦听oauth2_proxy
在4180
上侦听grafana
监听3000
尽管通过代理(从代理和身份提供商的角度-这里是谷歌(成功地进行了身份验证,但已验证的用户不会转移到grafana,而是重定向到登录屏幕。
虽然我们可以使用auth.generic_oauth
通过第三方OAuth2
提供商对用户进行身份验证(请参阅此处(,但我选择这种方法的原因是为了使多个应用程序能够配置通用的身份验证后端。
您预计会发生什么:
如何复制(尽可能少且精确(:
# docker-compose.yml
version: '3'
services:
grafana:
container_name: grafana
image: grafana/grafana:latest
restart: always
user: '104'
volumes:
- $PWD/data/grafana:/var/lib/grafana
ports:
- 3000:3000
environment:
# [users]
- GF_USERS_ALLOW_SIGN_UP=false
- GF_USERS_AUTO_ASSIGN_ORG=true
- GF_USERS_AUTO_ASSIGN_ORG_ROLE=Admin
# [auth.basic]
- GF_AUTH_BASIC_ENABLED=false
# [auth]
- GF_AUTH_DISABLE_LOGIN_FORM=true
# [auth.proxy]
- GF_AUTH_PROXY_ENABLED=true
- GF_AUTH_PROXY_HEADER_NAME=X-Email
- GF_AUTH_PROXY_HEADER_PROPERTY=email
- GF_AUTH_PROXY_AUTO_SIGN_UP=true
- GF_AUTH_PROXY_ENABLE_LOGIN_TOKEN=false
oauth2-proxy:
container_name: oauth2-proxy
image: quay.io/oauth2-proxy/oauth2-proxy:latest
restart: always
ports:
- 4180:4180
volumes:
- $PWD/data/oauth2:/var/lib/oauth2_proxy
environment:
- OAUTH2_PROXY_PROVIDER=oidc
- OAUTH2_PROXY_CLIENT_ID=<google_client_id>
- OAUTH2_PROXY_CLIENT_SECRET=<google_client_secret>
- OAUTH2_PROXY_OIDC_ISSUER_URL=https://accounts.google.com
- OAUTH2_PROXY_COOKIE_SECRET=abcdefgh
- OAUTH2_PROXY_COOKIE_DOMAIN=http://localhost:3000
- OAUTH2_PROXY_EMAIL_DOMAINS=*
- OAUTH2_PROXY_COOKIE_SECURE=false
- OAUTH2_PROXY_UPSTREAMS=http://grafana:3000
- OAUTH2_PROXY_HTTP_ADDRESS=http://:4180
- OAUTH2_PROXY_REDIRECT_URL=http://localhost:3000/oauth2/callback
- OAUTH2_PROXY_SET_XAUTHREQUEST=true
- OAUTH2_PROXY_ERRORS_TO_INFO_LOG=true
- OAUTH2_PROXY_AUTH_LOGGING=true
- OAUTH2_PROXY_SHOW_DEBUG_ON_ERROR=true
- OAUTH2_PROXY_SET_AUTHORIZATION_HEADER=true
- OAUTH2_PROXY_PASS_AUTHORIZATION_HEADER=true
- OAUTH2_PROXY_PASS_USER_HEADERS=true
- OAUTH2_PROXY_PASS_HOST_HEADER=true
- OAUTH2_PROXY_REVERSE_PROXY=true
- OAUTH2_PROXY_SSL_UPSTREAM_INSECURE_SKIP_VERIFY=true
- OAUTH2_PROXY_SSL_INSECURE_SKIP_VERIFY=true
nginx:
container_name: nginx
image: nginx
restart: always
ports:
- 80:80
volumes:
- $PWD/data/nginx/:/etc/nginx/conf.d/
# nginx.conf
server {
listen 80;
server_name localhost;
location /oauth2/ {
proxy_pass http://oauth2-proxy:4180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Auth-Request-Redirect $request_uri;
}
location = /oauth2/auth {
proxy_pass http://oauth2-proxy:4180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header Content-Length "";
proxy_pass_request_body off;
}
location /grafana/ {
auth_request /oauth2/auth;
error_page 401 = /oauth2/sign_in;
auth_request_set $user $upstream_http_x_auth_request_user;
auth_request_set $email $upstream_http_x_auth_request_email;
proxy_set_header X-User $user;
proxy_set_header X-Email $email;
auth_request_set $auth_cookie $upstream_http_set_cookie;
add_header Set-Cookie $auth_cookie;
proxy_pass http://grafana:3000;
}
}
Rundocker-compose up -d --build
然后在浏览器中导航到localhost/grafana/=>用户重定向到oauth2_proxy=>谷歌登录成功=>返回grafana登录屏幕。
我似乎缺少了一些用于传递auth头之类的设置。有人能给我指正确的方向吗?
不久前这里也出现了类似的问题,但它对我不起作用。我已经有了GF_AUTH_BASIC_ENABLED=false
还有什么我们需要知道的吗:所有3个参与者:grafana、nginx、oauth2_proxy都有干净的日志,没有警告或错误。
环境:local
- Grafana版本:
grafana:latest
- 数据源类型&版本:
- 操作系统Grafana安装在:
MacOS
- 用户操作系统&浏览器:
Chrome
- Grafana插件:
- 其他:
nginx
、oauth2_proxy
您需要正确配置标头:
- GF_AUTH_PROXY_HEADER_NAME=X-Email
因此,此配置表示用户名/电子邮件将在X-Email
标头中。
但用户名/电子邮件似乎在不同的标题中,请参阅https://github.com/grafana/grafana/issues/27251#issuecomment-682477379:
X-Forwarded-User:<我的电子邮件>
所以应该是:
GF_AUTH_PROXY_HEADERS='Name:X-Forwarded-User Email:X-Forwarded-Email'