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


79

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." }

6
너는 나의 영웅이야. 나는 이것에 많은 시간을 낭비했지만 나는 당신이 나를 더 많이 구했다고 확신합니다!
Steven

당신은 그래서 :)이 답이 목록에 표시되지 않습니다, 귀하의 질문에 직접 대답해야

1
나는 이것이 얼마나 많은 시간을 먹었을 지 모르겠지만 꽤 오래되었을 것이라고 확신합니다. 생명의 은인.
Tom Manterfield

2020 년에도 여전히 시간과 시간을 절약하고 있습니다
Kyle

당신은 내 시간을 절약했습니다. 내가 얼마나 많은 날을 밤새도록했는지 모르겠다. 하 ... 정말 감사합니다. 좋은 하루 되세요, 정말 사랑 해요. 2020 년 7 월에도 여전히 시간과 시간을 절약합니다 !!!!!!!!!! lol
Tim

답변:


30

지금은 약간 다른 접근 방식을 사용합니다. 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가 스크립트를 업데이트하면 특히 다른 위치로 이동하는 경우 잠재적으로 중단 될 수 있습니다.


이거 좋다. 이제 awsebcli에 eb ssh가 있으므로 dev-ops에서 게으르고 손으로 정리하는 것이 더 쉽다는 것을 알았습니다.
sahutchi

3
여전히 관련있는 답변입니다. 이를 추가하려면 (초보 aws 사용자로서) container_commands 위에 .ebextensions .config 파일에 명령 태그를 추가하기 만하면 작동합니다. 자세한 모두 여기에 처리되는 태그에 : 링크
sean.hudson

이에 대한 두 가지 문제 : 1) 두 번째 및 후속 배포에서만 작동합니다. 2) sed는 배포 할 때마다 구성 파일에 동일한 줄에 계속 쌓입니다. Manel Clos의 솔루션 (Apache의 conf.d에 새 파일 생성)은 이러한 문제를 겪지 않으며 환경 변수를 변경할 때도 작동합니다.
Mike Placentra

1
나는 한동안 EB를 사용하지 않았지만 그의 솔루션이 더 깨끗하고 우아하다는 데 동의합니다. 나는 그것이 제대로 작동한다면 아마 그것을 사용할 것입니다.
Rubén Durá Tarí 2017-06-05

당신은 내 팀을 주말에 구했습니다. 감사합니다!
Atul Mishra

63

나는 표준 장소에 추가 구성을 갖는 아이디어를 좋아합니다. .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


7
이것은 깨끗한 해결책입니다. 환경 변수를 변경할 때 작동하며 배포 할 때마다 구성 파일에 동일한 줄을 계속 추가하지 않습니다.
마이크 플라 센트라

이 오류가 발생합니다.not authorized to perform: rds:DescribeDBEngineVersions
치라 Maliwal

34

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

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

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

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


5
위의 의견에서 너무 빨리 말한 것 같습니다. 이것은 초기 배포에서 작동하지만 환경에서 무언가를 변경하면 (예 : 새 변수 추가) 이러한 변경 사항이 적용될 때 실행되지 않고 wsgi.conf가 여전히 재생성 된 것 같습니다. 변경이 발생할 때마다 실행되는 앱 구성을 알고 있다고 가정하지 않습니까?
Tom Manterfield

나는 모든 git aws.push에 이것을 포함합니다. 그러나 예, 매개 변수를 변경할 때 때때로 CSS를 잃습니다. 환경을 변경 한 후 환경-애플리케이션 버전 메뉴의 UI를 통해 마지막 푸시를 다시 배포하면 앱에서 문제가 발생합니까?
sahutchi

이 수정 사항은 현재 오래된 것 같습니다. Rubén Durá Tarí의 2 위 답변은 작동하며 (오타를 수정 한 경우) 표면에 더 강력 해 보입니다.
skolsuper

@skolsuper 오타가 무엇입니까?
Nate

1
@Nate는 하나도 없습니다. 테스트했을 때 오타를 "수정"하는 동시에 실수로 수정 ​​한 관련없는 문제가있었습니다. Rubén은 내 buffoonery 이후 작업 상태로 그의 대답을 편집했습니다.
skolsuper

0

위의 해결책이 흥미롭지 만 다른 방법이 있습니다. .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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.