【发布时间】:2014-11-13 23:41:59
【问题描述】:
我正在使用 Python/Django 1.7.1 和 Django REST 框架构建一个项目。
我的项目有两个子域:
- api.myproject.com
- www.myproject.com
WWW 主机包含用户可以登录的网站。 REST 后端位于 API 主机上。
我这样配置 Django REST 框架:
REST_FRAMEWORK = {
'PAGINATE_BY': 10,
'PAGINATE_BY_PARAM': None,
'MAX_PAGINATE_BY': 10,
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
),
}
本质上:我在 WWW 主机上对 AJAX 使用基于会话的身份验证,对 Android 应用程序使用基于令牌的身份验证。
现在问题来了。在 WWW 主机上登录的用户可以在 API 主机上使用 REST API,因为启用了会话身份验证。在 WWW 主机上,正在运行的 JavaScript 对 API 主机进行 API 调用。这很好用,但是当用户登录到 WWW 主机然后打开一个新选项卡并转到 API 主机时,用户只能看到 REST API,这不是我的意图。
当用户在 WWW 主机上登录时,是否无论如何都不在 API 主机上显示 REST API?
我这样配置会话 cookie 域和 CSRF cookie 域:
DOMAIN = 'myproject.com'
SESSION_COOKIE_DOMAIN = '.' + DOMAIN
CSRF_COOKIE_DOMAIN = SESSION_COOKIE_DOMAIN
我修改为:
DOMAIN = 'myproject.com'
SESSION_COOKIE_DOMAIN = 'www.' + DOMAIN
CSRF_COOKIE_DOMAIN = SESSION_COOKIE_DOMAIN
但是在尝试这个时,当用户登录 WWW-host 时,REST API 无法通过会话身份验证使用,因为 cookie 仅为 WWW-host 设置...
对我的问题有什么建议吗? :-)
提前致谢!
亲切的问候, K.
【问题讨论】:
标签: rest session authentication