Ich habe eine REST-API in Django mit Django-Rest-Framework implementiert und oauth2 zur Authentifizierung verwendet.
Ich habe getestet mit:
curl -X POST -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=password&username=YOUR_USERNAME&password=YOUR_PASSWORD" http://localhost:8000/oauth2/access_token/
und
curl -H "Authorization: Bearer <your-access-token>" http://localhost:8000/api/
auf localhost mit erfolgreichen Ergebnissen im Einklang mit der Dokumentation.
Als ich dies auf eine vorhandene AWS-Instanz für elastische Bohnenstangen hochschob, erhielt ich:
{ "detail" : "Authentication credentials were not provided." }
Antworten:
Ich benutze jetzt einen etwas anderen Ansatz. Sahutchis Lösung funktionierte, solange die Env-Variablen nicht geändert wurden, wie Tom Dickin betonte. Ich habe etwas tiefer in EB gegraben und herausgefunden, wo sich die Vorlage wsgi.conf befindet, und dort die Option "WSGIPassAuthorization On" hinzugefügt.
commands: WSGIPassAuthorization: command: sed -i.bak '/WSGIScriptAlias/ a WSGIPassAuthorization On' config.py cwd: /opt/elasticbeanstalk/hooks
Das funktioniert immer, auch wenn Umgebungsvariablen geändert werden. Ich hoffe, Sie finden es nützlich.
Bearbeiten: Es scheint, als würden viele Leute diese Antwort immer noch treffen. Ich habe ElasticBeanstalk schon eine Weile nicht mehr verwendet, aber ich würde die unten stehende Lösung von Manel Clos untersuchen. Ich habe es nicht persönlich ausprobiert, aber es scheint eine viel sauberere Lösung zu sein. Dies ist buchstäblich ein Hack für EBs-Skripte und könnte möglicherweise in Zukunft unterbrochen werden, wenn EB sie aktualisiert, insbesondere wenn sie an einen anderen Speicherort verschoben werden.
quelle
Ich mag die Idee, nur eine zusätzliche Konfiguration am Standardplatz zu haben. Erstellen Sie in Ihrem Verzeichnis .ebextensions eine Datei wsgi_custom.config mit:
files: "/etc/httpd/conf.d/wsgihacks.conf": mode: "000644" owner: root group: root content: | WSGIPassAuthorization On
Wie hier veröffentlicht: https://forums.aws.amazon.com/message.jspa?messageID=376244
quelle
not authorized to perform: rds:DescribeDBEngineVersions
Ich dachte, das Problem liege in meiner Konfiguration in Django oder einem anderen Fehlertyp, anstatt mich auf die Unterschiede zwischen localhost und EB zu konzentrieren. Das Problem liegt in den Apache-Einstellungen von EB.
WSGIPassAuthorization ist nativ auf OFF gesetzt, daher muss es eingeschaltet sein. Dies kann in Ihrer * .config-Datei in Ihrem .ebextensions-Ordner mit dem folgenden hinzugefügten Befehl erfolgen:
container_commands: 01_wsgipass: command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
Bitte lassen Sie mich wissen, wenn ich etwas verpasst habe oder wenn es einen besseren Weg gibt, das Problem zu betrachten. Ich konnte nirgendwo im Internet etwas Spezielles darüber finden und dachte, dies könnte jemandem Stunden der Fehlerbehebung ersparen und mich dann dumm fühlen.
quelle
Obwohl die obige Lösung interessant ist, gibt es einen anderen Weg. Behalten Sie die VirtualHost-Konfigurationsdatei wsgi.conf bei, die Sie in .ebextensions verwenden möchten, und überschreiben Sie sie in einem Post-Deployment-Hook (Sie können diese Vorbereitstellung nicht durchführen, da sie neu generiert wird (ja, ich habe dies schwer herausgefunden) Wenn Sie dies tun, stellen Sie zum Neustart sicher, dass Sie das Supervisorctl-Programm zum Neustart verwenden, damit alle Umgebungsvariablen richtig eingestellt werden. (Ich habe dies auch auf die harte Tour herausgefunden.)
cp /tmp/wsgi.conf /etc/httpd/conf.d/wsgi.conf /usr/local/bin/supervisorctl -c /opt/python/etc/supervisord.conf restart httpd exit 0
01_python.config:
05_fixwsgiauth: command: "cp .ebextensions/wsgi.conf /tmp"
quelle