2

我为 AJAX Web 应用程序(以及未来的本地客户端)配置了 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”错误。我认为我做了所有正确的事情来使事情跨域工作还是我错过了什么?

提前感谢您的任何帮助或提示!

亲切的问候,克里斯托夫

4

2 回答 2

3

如果您使用 Apache mod_wsgi 来提供服务,您可能需要将以下内容添加到您的 VirtualHost 配置文件中,因为授权标头已被 mod_wsgi 剥离。您需要将以下内容添加到您的 VirtualHost 配置中:

WSGIPassAuthorization On

进一步参考:http ://django-rest-framework.org/api-guide/authentication.html#unauthorized-and-forbidden-responses

于 2013-10-05T19:47:59.877 回答
2

这应该有效:

jquery.rest.js

$.ajax({
    xhrFields: {withCredentials: true},
    ...
});

设置.py:

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = ('www.sandbox.dev:8080', )

SESSION_COOKIE_DOMAIN = '.sandbox.dev'
CSRF_COOKIE_DOMAIN = '.sandbox.dev'
于 2013-10-06T18:23:24.330 回答