即使使用 SSL 证书,Quart 上的 Discord OAUTH 也会收到 InsecureTransportError

Discord OAUTH on Quart recieving InsecureTransportError even with an SSL certificate

最近我在做一个网站项目,允许用户使用他们的 Discord 帐户登录以使用他们的帐户浏览网站。

该网站使用 Flask-Discord 库,Quart 作为我的 WSGI Web 框架,Hypercorn 作为我的生产服务器,Nginx 作为代理将 Web 请求传递到我的 Hypercorn 套接字。我已经使用 Certbot-Nginx 设置了一个 SSL 证书,并将 Let Encrypt 作为证书颁发者。但是,在用户被重定向到 Discord 登录页面后,用户登录到 Discord 并请求回调到我的 Quart 服务器我收到以下错误:

oauthlib.oauth2.rfc6749.errors.InsecureTransportError: (insecure_transport) OAuth 2 MUST utilize https.

网站已设置并正常工作,域设置暂时带有 noip,SSL 证书有效,使所有请求重定向到 HTTPS 而不是 HTTP。

是否可能因为 SSL 证书是使用 Nginx 设置的,所以 Python OAuth2 库不知道 SSL 证书?考虑到所有请求都被重定向到 HTTPS,这似乎不太可能。

我发现很多人建议为了防止此类错误,只需更改 OAuth 环境变量以允许不安全的传输,但我不想损害网站的安全性。

关于为什么会发生这种情况的任何想法都将非常有帮助。

谢谢

发生这种情况是因为来自 Nginx 反向代理的请求采用 HTTP 格式。因为你是 运行 本地的 Quart 应用程序,比如 http://127..0.0.1:5000 并且当 Nginx 向这个 URL 发出请求时,它以 http 开头。因此,不安全的传输仅从 Nginx 到您的 Quart 应用程序。您可以通过设置 "OAUTHLIB_INSECURE_TRANSPORT" = "true" 来抑制它。更多亮点:https://github.com/thec0sm0s/Flask-Discord/issues/3#issuecomment-676567390