我为AJAX网络应用程序(以及将来的本机客户端)配置了一个Django REST API,用于SessionAuthentication,TokenAuthentication和OAuth2Authentication。
Token en OAuth2身份验证工作正常,但SessionAuthentication的行为尚未像我希望的那样工作。
我目前有两个REST API具有相同的配置:
http://api.sandbox.dev:8080/和http://www.sandbox.dev:8080/api/
我的AJAX网络应用程序位于http://www.sandbox.dev:8080。
代码:
每当我在www.sandbox.dev的api.sandbox.dev上对API进行AJAX调用时,都会收到“403 Forbidden”错误。我认为我做了所有正确的事情,让事情跨域工作或者我错过了什么?
提前感谢您提供任何帮助或提示!
亲切的问候, 克里斯托夫
答案 0 :(得分:3)
如果您使用Apache mod_wsgi来提供服务,则可能需要将以下内容添加到VirtualHost配置文件中,因为mod_wsgi会删除授权标头。您需要将以下内容添加到VirtualHost配置中:
WSGIPassAuthorization On
进一步参考:http://django-rest-framework.org/api-guide/authentication.html#unauthorized-and-forbidden-responses
答案 1 :(得分:2)
这应该有效:
jquery.rest.js
$.ajax({
xhrFields: {withCredentials: true},
...
});
settings.py:
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = ('www.sandbox.dev:8080', )
SESSION_COOKIE_DOMAIN = '.sandbox.dev'
CSRF_COOKIE_DOMAIN = '.sandbox.dev'