Si j'essaie de livrer l'interface utilisateur Swagger à l'aide de Flask RestPlus via HTTPS, seul le message d'erreur "Aucune spécification fournie" s'affiche à l'URL racine et l'interface utilisateur Swagger complète ne se charge jamais. Cependant, si je visite les terminaux d'API, ils renvoient les réponses comme prévu.
En regardant le code HTML source pour la page d'erreur, j'ai remarqué que swagger.json
était extrait de http://myhost/
plutôt que https://myhost/
J'ai découvert exactement le même problème sur les problèmes restplus Github
J'ai temporairement résolu mon problème avec the monkey-patch mentionné sur cette page. L'interface utilisateur de Swagger se charge et, en regardant la source HTML, je constate que swagger.json
est effectivement extrait de https://myhost
.
Pourquoi cela se produit-il et comment puis-je résoudre le problème sans utiliser le patch de singe?
HTTPS est une gracieuseté du service HTTPS "flexible" de Cloudflare.
Mon application est derrière Nginx qui est ainsi configurée et ne cause aucun problème à ma connaissance:
...
http {
...
server {
location / {
charset UTF-8;
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
charset UTF-8;
proxy_intercept_errors on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_Host;
proxy_redirect off;
proxy_pass http://127.0.0.1:5000;
}
}
}
J'ai utilisé ci-dessous pour le faire fonctionner. Vous pouvez voir l'exemple stable dans le lien ci-dessous.
http://flask-restplus.readthedocs.io/fr/stable/example.html
from werkzeug.contrib.fixers import ProxyFix
app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
Je ne suis pas sûr que cela soit totalement sécurisé, mais voici comment je l’ai corrigé dans Nginx:
sub_filter "http://$Host/" "https://$Host/";
sub_filter_once off;
proxy_redirect off;
Je suis en train de décharger SSL sur Nginx et cela fonctionne sans aucun problème pour moi. Cela supprime également le besoin de monkey patch code d'application.
La méthode que vous avez énumérée à partir des problèmes flask-restplus est définitivement considérée comme non sécurisée:
Please keep in mind that it is a security issue to use such a
middleware in a non-proxy setup because it will blindly trust
the incoming headers which might be forged by malicious clients.