如何处理Django中不共享同一个域的前端

Bud*_*hot 7 django cookies session django-rest-framework

我在 Django 项目中的会话面临一个大问题。

后端托管在.my-domain.org,前端使用后端的 REST API .front-end.com。将来,可能会出现完全不同域上的其他前端。

使用django提供的session框架时出现这种情况如何处理?似乎SESSION_COOKIE_DOMAIN只允许在一个子域上设置会话 cookie 。结果是,如果我希望能够在.my-domain.org(ie, SESSION_COOKIE_DOMAIN = None)登录,那么.front-end.com当它调用 API 端点时我无法接收会话 cookie 。另一方面,设置SESSION_COOKIE_DOMAIN.front-end.com会阻止我连接到站点管理员。SESSION_COOKIE_PATH当然,情况也受到影响...

任何帮助都非常受欢迎。我很确定我不是第一个需要可以从外部域访问具有会话身份验证的 REST API 的人。

Kev*_*own 3

Django 使用 cookie 进行基于会话的身份验证,并且这些cookie通常不能跨多个域设置。虽然您可以使用CORS 和稍微解决此问题,但在某些浏览器中默认情况下可能会阻止此操作。withCredentials

跨域工作时,通常最好使用其他身份验证方法。即使您能够让 CORS 与 cookie 一起使用,您也必须与跨域的 CSRF作斗争,Django REST Framework在其文档中指出了这一点。我推荐 OAuth 2,因为它具有广泛的客户端支持和 Django REST Framework 内的支持,但其他人使用时没有出现TokenAuthentication任何问题

使用 OAuth 时,您需要将前端设置为客户端并使用Web 身份验证流程进行身份验证,否则您会将私钥公开,这不会有好结果。这将以与“单点登录”类似的方式工作,但不需要前端签署请求并保存私钥。您也无需担心 CSRF,因为 Django REST Framework 仅需要它用于SessionAuthentication.


归档时间:

查看次数:

2154 次

最近记录:

10 年,11 月 前