0

最近我一直在做一个网站项目,该项目允许用户使用他们的 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 环境变量以允许不安全的传输,但我不想损害网站的安全性。

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

谢谢

4

1 回答 1

1

这是因为来自 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

于 2020-09-29T19:14:28.833 回答