当 grafana 在 Application Load Balancer 后面时,如何配置它以使用 Oauth2?

How do I configure grafana to use Oauth2 when it's behind an Application Load Balancer?

我正在尝试为 grafana 实例配置 Google Oauth2。

我的 grafana 在 ALB 后面的 Amazon EC2 实例中运行。 ALB 使用的是 SSL,但不是 grafana 实例。

我在 Grafana 上设置了 Oauth2,我可以看到“使用 google 登录”按钮。 但是,当我按下它并选择我的 google 帐户时,出现以下错误:

Error 400: redirect_uri_mismatch
http://grafana.acme-live.co.uk:3000/login/google

google这边的配置很简单,我输入了我的 “授权 javascript 来源”:

https://grafana.acme-live.co.uk

和“授权重定向URL”:

https://grafana.acme-live.co.uk:3000/login/google

我的grafana.ini文件:

protocol = http
http_port = 3000
domain = grafana.acme-live.co.uk
root_url = %(protocol)s://%(domain)s:%(http_port)s/
enabled = true
client_id = acme.apps.googleusercontent.com
client_secret = acme-ACME
scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
auth_url = https://accounts.google.com/o/oauth2/auth
token_url = https://accounts.google.com/o/oauth2/token
allowed_domains = grafana.acme-live.co.uk
allow_sign_up = true

在我看来,GoogleOauth 很困惑,因为它期待通过 SSL 的身份验证请求,但 grafana 服务器以纯 HTTP 发送请求。

在 AUTH 过程之后,Google 尝试在端口 3000 上联系 grafana 服务器,但它在该端口上击中 LB,而 LB 不在该端口上侦听:

https://grafana.acme-live.co.uk:3000/login/google?state=XXYCuMtOvhap1B8urTCCOiXXYCurL8LRXL2yIVDcYUE%3D&code=4/0AX4XfWhGzhjj3JygxB2kMzxa8NMtOvhap1B8QrHhMQQx9ev032k5ChwEJINnbaM94ykRCA&scope=email%20profile%20https://www.googleapis.com/auth/userinfo.profile%20https://www.googleapis.com/auth/userinfo.email%20openid&authuser=0&hd=acme.com&prompt=consent

当 grafana 在 Application Load Balancer 后面时,我该如何配置它来使用 Oauth2?

谢谢

重定向 uri 必须与您在 Google 云控制台中为您的应用程序注册的重定向 uri 之一完全匹配。

如果它说您需要 http://grafana.acme-live.co.uk:3000/login/google 那么只需添加

目前您只添加了 https://grafana.acme.co.uk:3000/login/google,这与您发送的 http 不完全匹配,但您注册了 https。

因此,要么添加正确的重定向 uri,要么将您的应用设置为 运行 https。

[server]
# Protocol (http or https)
protocol = https

什么是重定向 uri?

重定向 uri 是您的应用程序告诉 google 它接受授权响应的位置。您的应用程序必须在该确切位置列出,并且该位置必须在 google 开发人员控制台中注册。

https://grafana.com/docs/grafana/latest/auth/google/

You may have to set the root_url option of [server] for the callback URL to be correct. For example in case you are serving Grafana behind a proxy.

那是你的问题。所以尝试(我猜你想在 http://grafana.acme-live.co.uk 上公开它,而不是在端口 3000 上):

[server]
root_url = https://grafana.acme.co.uk/

Google 客户端配置中的“授权重定向 URL”:

https://grafana.acme-live.co.uk/login/google