django - 与 DJango Simple SSO 一起使用的 CORS 问题
问题描述
我正在使用Django Simple SSO的一个分支作为服务器上的身份验证机制。当我们使用“标准”方式登录服务器时,它工作得很好。这意味着,我们只需访问 /login 路径,登录,然后浏览受限路径等。
当我们想要连接到第三台服务器时,问题就出现了,该服务器也通过 javascript/AJAX 中继 SSO 身份验证,而无需先直接访问 /login 路径。
我尝试使用 django-cors-headers 但没有得到预期的结果。我快要放弃了,所以欢迎任何帮助。
问题
假设我们在服务器 1 和身份验证服务器上登录,并且我们想要服务器 2 上的资源
当浏览器被重定向到身份验证服务器以验证浏览器是否使用有效用户登录时,cookie
不会传输标头。(有关 Django 简单 SSO 工作原理的更多详细信息,请参见按钮图)
auth-server在预检请求上设置的标头如下:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: accept-encoding, accept, authorization, cookie, content-type, dnt, origin, user-agent, x-csrftoken, x-grafana-org-id, x-dashboard-id, x-panel-id, x-requested-with
Access-Control-Allow-Methods: DELETE, GET, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: https://server1-domain
Access-Control-Max-Age: 86400
Connection: keep-alive
Content-Length: 0
Content-Type: text/html; charset=utf-8
Date: Fri, 16 Jul 2021 12:14:54 GMT
Server: nginx
Vary: Origin
GET 请求的标头包含以下内容:
请求/客户:
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Host: auth-server-domain
Origin: https://server1-domain
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
x-grafana-org-id: 1
响应/认证服务器:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://server1-domain
Connection: keep-alive
Content-Language: es
Content-Length: 0
Content-Type: text/html; charset=utf-8
Date: Fri, 16 Jul 2021 12:14:54 GMT
Location: /error_unauthorized_page
Referrer-Policy: same-origin
Server: nginx
Vary: Accept-Language, Cookie, Origin
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
我认为所有标题都是正确的,但显然存在一些错误。在 cookie 方面,我尝试使用该SingleSite
属性,将其设置为None
并且Lax
没有任何更改。从我的角度来看,cookie 浏览器内存上设置的域是“正确的” .auth-server-domain
(注意点)。
我使用 DJango 3.2.5 和 Google Chrome 作为网络浏览器。如果您知道为什么没有在 auth-server-domain cors 请求上发送 cookie,我将非常感谢您的评论。
如果您认为我遗漏了任何相关信息,请随时提问!感谢大家达到这一点并帮助我!
附录:
解决方案
推荐阅读
- sapui5 - 如何在 SAPui5 中隐藏 TreeTable 的列
- python - 熊猫数据框 | 列内字典 | 在列内进行舍入和排序 | 最好的方法?
- ios - 删除 SceneDelegate 后在 AppDelagate 中设置 rootviewcontoller
- javascript - Typescript从参数返回函数类型
- c# - 如何检查 ObjectIdentifier 是否是另一个 ObjectIdentifier 的根?(SnmpSharpNet)
- excel - 债券价格分数转换为十进制 32nd excel 公式
- azure - 如何在 ARM 模板中创建一个天蓝色的功能键?
- sql - 需要完全外部连接而不需要交叉连接
- websphere - 使用 Jython 获取 AppServer 的当前重启策略状态 (nodeRestartState)
- azure - Azure Pipelines 中可用的 Azure 服务连接是空的,即使我已经有有效的服务连接?