Django是否可以获取浏览器存储的Cookie用于身份认证?
前提判断
首先需要确认你开发的内部站点域名,和组织身份认证服务的域名是否属于同域/父域关系(例如你的站点是xxx.company.com,认证服务是sso.company.com,就属于同父域场景),不同场景下的实现方式不同:
同域/同父域场景
- 如果目标Cookie没有设置
HttpOnly属性:你可以直接通过前端JS调用document.cookie读取对应Cookie值,再将该值通过请求头/请求体传给你的后端即可。 - 如果目标Cookie设置了
HttpOnly属性:前端JS无法直接读取,但前端请求你的后端接口时可以自动携带该Cookie,你直接从后端接收到的请求Cookie头中提取对应值即可。
跨父域场景需要额外配置:前端发请求时开启
withCredentials: true,后端响应头配置Access-Control-Allow-Credentials: true,且Access-Control-Allow-Origin不能设置为通配符*。
完全跨域场景
如果你的站点和认证服务域名完全无关联,受浏览器同源策略限制,你无法直接读取、也无法让浏览器自动携带认证服务域下的Cookie,这种场景请走以下合规方案:
- 联系组织认证服务运维方,在用户完成认证后将你需要的凭证同步写入你站点的域下的Cookie中,你就可以按照同域场景的方式读取/携带。
- 对接组织的服务端凭证换取接口,你的后端直接通过服务端调用的方式,用用户的基础身份信息换取你需要的服务调用凭证,不需要从浏览器侧获取Cookie。
注意事项
- 不要尝试绕过浏览器安全限制读取跨域Cookie,所有这类方案都不符合现代浏览器的安全规范,无法稳定生效。
- 如果你的后端要对接的服务属于组织内部信任域,也可以申请服务端之间的专属调用凭证,不需要依赖用户侧的浏览器Cookie完成调用。
内容的提问来源于stack exchange,提问作者Surya_1897
相关产品推荐
相关产品推荐

