加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:46:03 所属栏目:Python 来源:网络整理
导读:我在Django项目中遇到了一个很大的问题. 后端托管在.my-domain.org,前端在.front-end.com上使用后端的REST API.将来,可能会出现完全不同的域上的其他前端. 当我使用Django提供的会话框架时,如何处理这种情况?看起来SESSION_COOKIE_DOMAIN只允许在一个子域上
我在Django项目中遇到了一个很大的问题.

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

当我使用Django提供的会话框架时,如何处理这种情况?看起来SESSION_COOKIE_DOMAIN只允许在一个子域上设置会话cookie.结果是,如果我想能够登录.my-domain.org(即SESSION_COOKIE_DOMAIN =无),那么当它调用API端点时,我无法从.front-end.com收回会话cookie.另一方面,将SESSION_COOKIE_DOMAIN设置为.front-end.com会阻止我连接到网站管理员.情况也受到SESSION_COOKIE_PATH的影响……

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

解决方法

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

在跨域工作时,通常最好使用其他身份验证方法.即使你能够让CORS与cookie一起工作,你也必须与CSRF across domains进行战斗,Django REST Framework指出in their documentation.我建议使用OAuth 2,因为广泛的客户支持和Django REST Framework中的支持,但其他人使用过TokenAuthentication without issues.

使用OAuth时,您需要将前端设置为客户端,并使用web authentication flow进行身份验证,否则您将使用leaving private keys out in the open,但效果不佳.这将以与“单点登录”类似的方式工作,但不需要您的前端签署请求并保留私钥.您也不需要为CSRF烦恼,因为Django REST Framework仅需要SessionAuthentication.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读