我在django中使用django-rest-framework实现了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/
在本地主机上,成功结果与文档一致。
将其推送到现有的AWS Elastic beantalk实例时,我收到了:
{ "detail" : "Authentication credentials were not provided." }
我现在使用略有不同的方法。只要汤姆·迪金(Tom dickin)指出不改变环境变量,sahutchi的解决方案就可以工作。我在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