Колба не может прочитать заголовок авторизации на ElasticBeanstalk - PullRequest
3 голосов
/ 10 марта 2019

РЕДАКТИРОВАТЬ: читайте дальше о двух решениях.

Я развернул приложение Flask в AWS ElasticBeanstalk.Приложение не может прочитать заголовок ' Authorization ' в запросах.

Отчеты журнала ошибок:

KeyError: 'HTTP_AUTHORIZATION'

Ошибка, связанная с:

@application.before_request
    def before_request():
       try:
          token = request.headers['Authorization'].split(' ')[-1]
          user = User.get(token=token)
          g.user = user
       except ValueError as e:
        abort(401)

Каталог приложения:

app/
    .elasticbeanstalk
    application.py
    virt
    .ebignore
    requirements.txt

Конфигурация среды устанавливает WSGIPath на application.py :

aws:elasticbeanstalk:container:python:
 NumProcesses: '1'
 NumThreads: '15'
 StaticFiles: /static/=static/
 WSGIPath: application.py

Среда запускает Python 3.6 иследующие компоненты:

Click==7.0
Flask==1.0.2
Flask-RESTful==0.3.7
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.1
peewee==3.9.2
psycopg2==2.7.7
python-dotenv==0.10.1
pytz==2018.9
six==1.12.0
Werkzeug==0.14.1

Требуется ли что-нибудь еще?

Попытка (неудачное) решение:

Я много часов сожгла на этом,и попытался настроить WSGIPassAuthorization , (в соответствии с рекомендациями здесь и в других местах), однако мне это не удалось.

Каталог приложения, содержащий обходной путь:

app/
    .elasticbeanstalk
    .ebextensions/
        wsgi_custom.config
    application.py
    virt
    .ebignore
    requirements.txt

Когда я пытаюсь создать среду eb, содержащую .ebextensions / wsgi_custom.config , интерфейс командной строки EB сообщает об ошибке, говоря, что YAML недействителен:

    ERROR: InvalidParameterValueError - The configuration file .ebextensions/wsgi_custom.config in application version app-190310_100513 contains invalid YAML or JSON. YAML exception: Invalid Yaml: while scanning a simple key
 in "<reader>", line 7, column 5:
        WSGIPassAuthorization On
        ^
could not found expected ':'
 in "<reader>", line 7, column 29:
    On
      ^
, JSON exception: Invalid JSON: Unexpected character (f) at position 0.. Update the configuration file.

Содержание .ebextensions / wsgi_custom.config :

    files:
       "/etc/httpd/conf.d/wsgi_custom.conf":
         mode: "000644"
         owner: root
         group: root
         content: |
           WSGIPassAuthorization On

Мой инструмент проверки YAML сообщает о действительном YAML.

Примечание. Редактор настроен на использование пробелов в соответствии с AWS YAML рекомендациями.

РЕДАКТИРОВАТЬ: РЕШЕНИЕ 1

РешеноОшибки проверки YAML в приведенном выше примере.Я считаю, что ошибки проверки были красной селедкой.Файл .conf, упомянутый в сценарии, теперь имеет правильное имя.

Содержимое файла .ebextensions / wsgi_custom.config:

    files:
  "/etc/httpd/conf.d/wsgihacks.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      WSGIPassAuthorization On

РЕДАКТИРОВАТЬ: РЕШЕНИЕ 2 с использованием container_commands

Установить WSGIPassAuthorization на ElasticBeanstalk с помощью container_commands .

Шаг 1. Создать .ebextensions / wsgi_custom.config:

app/
    .elasticbeanstalk
    .ebextensions/
        wsgi_custom.config
    application.py
    virt
    .ebignore
    requirements.txt

wsgi_custom.config :

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

Шаг 2. Перезапустить Среда EB.

Приложение Flask теперь может читать заголовок ' Authorization ' в запросах.

Ура :)) 1100 *

Если кто-нибудь может указать мне на ясное обсуждение WSGI это будет оценено.

...