REST api in Django Django-rest-frameworkを実装し、認証にoauth2を使用しました。
私はテストしました:
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/
そして
curl -H "Authorization: Bearer <your-access-token>" http://localhost:8000/api/
ドキュメントと一致する成功した結果を持つローカルホストで。
これを既存のAWS Elastic Beanstalkインスタンスにプッシュすると、次のメッセージが表示されました。
{ "detail" : "Authentication credentials were not provided." }
今は少し異なるアプローチを使用しています。 Tom dickinが指摘したように、env変数が変更されない限り、sahutchiのソリューションは機能しました。私はEBの内部を少し掘り下げて、wsgi.confテンプレートがどこにあるのかを見つけ、そこに「WSGIPassAuthorization On」オプションを追加しました。
commands:
WSGIPassAuthorization:
command: sed -i.bak '/WSGIScriptAlias/ a WSGIPassAuthorization On' config.py
cwd: /opt/elasticbeanstalk/hooks
これは、環境変数を変更する場合でも常に機能します。お役に立てば幸いです。
編集:多くの人がまだこの反応に達しているようです。私はしばらくElasticBeanstalkを使用していませんが、以下のManel Closのソリューションの使用を検討します。私は個人的には試していませんが、もっとすっきりした解決策のようです。これは文字通りEBsスクリプトへのハックであり、EBがそれらを更新した場合、特にそれらを別の場所に移動した場合、将来的に破損する可能性があります。
標準の場所で追加の設定を行うというアイデアが気に入っています。 .ebextensionsディレクトリに、次の内容でwsgi_custom.configファイルを作成します。
files:
"/etc/httpd/conf.d/wsgihacks.conf":
mode: "000644"
owner: root
group: root
content: |
WSGIPassAuthorization On
ここに投稿されたとおり: https://forums.aws.Amazon.com/message.jspa?messageID=376244
問題は、localhostとEBの違いに焦点を当てるのではなく、Djangoまたは他のエラータイプの設定にあると考えました。問題は、EBのApache設定にあります。
WSGIPassAuthorizationはネイティブでオフに設定されているため、オンにする必要があります。これは、次のコマンドを追加して、.ebextensionsフォルダーの* .configファイルで実行できます。
container_commands:
01_wsgipass:
command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
何かを見落としたり、問題をより適切に調査する方法があるかどうかをお知らせください。私はこれについてウェブ上のどこにも特に何も見つけることができず、これが誰かのトラブルシューティングの時間を節約し、愚かさを感じると思った。
上記の解決策は興味深いですが、別の方法があります。使用するwsgi.conf VirtualHost構成ファイルを.ebextensionsに保持し、デプロイ後フックで上書きします(再デプロイされるため、このデプロイ前は実行できません(はい、これは難しいことがわかりました)これを行う場合は、再起動するために、必ずすべての環境変数を正しく設定するために、supervisorctlプログラムを使用して再起動してください(これも難しい方法であることがわかりました)。
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"