Учетные данные для авторизации лишены-django, elastic beanstalk, oauth



я реализовал 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/

на локальном хосте с успешными результатами, соответствующими документации.

при нажатии на это до существующего экземпляра AWS elastic beanstalk, я получил:

{ "detail" : "Authentication credentials were not provided." }
200   4  

4 ответов:

теперь я использую немного другой подход. решение сахутчи работало до тех пор, пока переменные env не были изменены, как указал том Дикин. Я копнул немного глубже внутри EB и узнал, где wsgi.шаблон conf находится и там добавлена опция "WSGIPassAuthorization On".

commands:
  WSGIPassAuthorization:
    command: sed -i.bak '/WSGIScriptAlias/ a WSGIPassAuthorization On' config.py
    cwd: /opt/elasticbeanstalk/hooks

это всегда будет работать, даже при изменении переменных среды. Я надеюсь, что вы найдете его полезным.

Edit: похоже, что многие люди все еще поражают этот ответ. Я не использовал ElasticBeanstalk через некоторое время, но я бы посмотрел на использование решения Manel Clos ниже. Я не пробовал это лично, но кажется гораздо более чистым решением. Это буквально взлом сценариев EBs и может потенциально сломаться в будущем, если EB обновит их, особенно если они переместят их в другое место.

Мне нравится идея просто иметь дополнительную конфигурацию на стандартном месте. В вашем .каталог ebextensions создает wsgi_custom.конфигурационный файл с:

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

Я думал, что проблема была с моей конфигурацией в django или какой-то другой тип ошибки вместо того, чтобы сосредоточиться на различиях между localhost и EB. Проблема заключается в настройках Apache EB.

wsgipassauthorization изначально установлен в OFF, поэтому он должен быть включен. Это можно сделать в вашем *.конфигурационный файл в вашем .добавлена папка ebextensions со следующей командой:

container_commands:
  01_wsgipass:
    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'

пожалуйста, дайте мне знать, если я что-то пропустил, или если есть лучший способ я должен быть глядя на проблему. Я не мог найти ничего конкретно об этом в любом месте в интернете и думал, что это может сэкономить кому-то часы устранения неполадок, а затем чувствовать себя глупо.

хотя выше решение, интересно, есть еще один способ. Держите wsgi.файл конфигурации Conf VirtualHost, который вы хотите использовать .ebextensions, и перезаписать его в post deploy hook (вы не можете сделать это перед развертыванием, потому что он будет повторно сгенерирован (да, я узнал это на своем горьком опыте). Если вы сделаете это, чтобы перезагрузиться, убедитесь, что используете программу 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"
    Ничего не найдено.

Добавить ответ:
Отменить.