gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:07:46 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

Django 使用 cookie 进行基于 session 的身份验证,通常不能跨多个域设置这些 cookie。虽然您可以使用 CORS and withCredentials 稍微解决这个问题,这可能是 blocked by default在某些浏览器中。

跨域工作时,通常最好使用另一种身份验证方法。即使您能够让 CORS 与 cookie 一起工作,您也将不得不与 CSRF across domains 战斗。 , Django REST Framework 指出 in their documentation .我会推荐 OAuth 2 因为广泛的客户端支持和 Django REST 框架中的支持,但其他人已经使用 TokenAuthentication without issues .

使用 OAuth 时,您需要将前端设置为客户端并使用 web authentication flow用于身份验证,否则您是 leaving private keys out in the open ,结局并不好。这将以类似于“单点登录”的方式工作,但不需要您的前端签署请求并保存私钥。你也不需要担心 CSRF,因为 Django REST Framework 只需要它用于 SessionAuthentication .

关于django - 如何处理Django中不共享同一个域的前端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27216556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com