Я реализовал REST api в 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/
на localhost с успешными результатами в соответствии с документацией.
При переносе этого на существующий экземпляр эластичного beanstalk AWS я получил:
{ "detail" : "Authentication credentials were not provided." }
Ответы:
Сейчас я использую немного другой подход. Решение sahutchi работало до тех пор, пока переменные env не были изменены, как указал Том Дикин. Я немного покопался в EB, выяснил, где находится шаблон wsgi.conf, и добавил туда опцию «WSGIPassAuthorization On».
commands: WSGIPassAuthorization: command: sed -i.bak '/WSGIScriptAlias/ a WSGIPassAuthorization On' config.py cwd: /opt/elasticbeanstalk/hooks
Это всегда будет работать, даже при изменении переменных среды. Надеюсь, вы сочтете это полезным.
Изменить: похоже, что многие люди все еще получают этот ответ. Я давно не использовал ElasticBeanstalk, но хотел бы рассмотреть возможность использования решения Manel Clos ниже. Я не пробовал лично, но кажется более чистым решением. Это буквально взлом скриптов EB, который потенциально может сломаться в будущем, если 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
источник
not authorized to perform: rds:DescribeDBEngineVersions
Я думал, что проблема связана с моей конфигурацией в django или с каким-либо другим типом ошибки, вместо того, чтобы сосредоточиться на различиях между localhost и EB. Проблема связана с настройками Apache EB.
WSGIPassAuthorization изначально отключен, поэтому его необходимо включить. Это можно сделать в вашем файле * .config в папке .ebextensions, добавив следующую команду:
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"
источник