我实现了一个REST API在Django Django的休息框架和使用的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弹性青苗例如,我收到:
{ "detail" : "Authentication credentials were not provided." }
我现在用一个稍微不同的方法。作为汤姆dickin指出ENV变量没有改变sahutchi的解决方案担任长。我里面挖EB深一点,发现其中wsgi.conf模板定位并添加了“WSGIPassAuthorization上”的选择。
commands:
WSGIPassAuthorization:
command: sed -i.bak '/WSGIScriptAlias/ a WSGIPassAuthorization On' config.py
cwd: /opt/elasticbeanstalk/hooks
这永远是可行的,不断变化的环境变量时也是如此。希望对你有帮助。
编辑:好像很多人还是达不到这个响应。我没有用ElasticBeanstalk在一段时间,但我会考虑使用以下马内尔克洛斯的解决方案。我还没有尝试过个人,但似乎更清洁的解决方案。这一个是字面上的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
我认为这个问题是我在Django配置或某些其他错误类型,而不是专注于本地主机和EB之间的差异。问题是与EB的Apache的设置。
WSGIPassAuthorization本身被设置为OFF,因此必须将其打开。你可以在你的* .config文件来完成你的.ebextensions文件夹使用以下命令添加:
container_commands:
01_wsgipass:
command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
请让我知道如果我错过了什么,或者有更好的办法,我应该看这个问题。我不是在网络上任何地方这个专门找到任何东西,认为这可能会节省故障排除有人小时,然后感到愚蠢的。
虽然上述方案很有趣,还有另一种方式。让你想在.ebextensions使用wsgi.conf虚拟主机配置文件,并在后部署挂钩覆盖它(你不能做这个预部署,因为它会被重新生成(是的,我发现了这一点硬方式)。如果你这样做,重新启动时,请务必使用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"