[django] 인증 자격 증명 제거 — django, elastic beanstalk, oauth

django-rest-framework로 django에서 REST API를 구현하고 인증을 위해 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에서.

이를 기존 AWS Elastic beanstalk 인스턴스로 푸시 할 때 다음을 받았습니다.

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



답변

지금은 약간 다른 접근 방식을 사용합니다. sahutchi의 솔루션은 Tom dickin이 지적한대로 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


답변

문제는 localhost와 EB의 차이점에 초점을 맞추는 대신 django 또는 다른 오류 유형의 구성에 있다고 생각했습니다. 문제는 EB의 Apache 설정에 있습니다.

WSGIPassAuthorization은 기본적으로 OFF로 설정되어 있으므로 ON으로 설정해야합니다. 다음 명령을 추가하여 .ebextensions 폴더의 * .config 파일에서이 작업을 수행 할 수 있습니다.

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

내가 놓친 것이 있거나 문제를 더 잘 살펴볼 수있는 방법이 있는지 알려주십시오. 나는 웹에서 이것에 대해 구체적으로 찾을 수 없었고 이것이 누군가의 문제 해결 시간을 절약하고 어리석은 느낌을 줄 것이라고 생각했습니다.


답변

위의 해결책이 흥미롭지 만 다른 방법이 있습니다. .ebextensions에서 사용하려는 wsgi.conf VirtualHost 구성 파일을 유지하고 배포 후 후크에서 덮어 씁니다 (이 사전 배포는 다시 생성되기 때문에 수행 할 수 없습니다 (예,이 파일은 이렇게하면 재부팅하려면 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"


답변