Vim*_*nyu 8 python ajax https xmlhttprequest single-sign-on
我需要通过 GET 调用访问数据,但资源受单点登录保护。我有 URI 端点和单点登录凭据。我开始使用 XMLHttpRequest() 发出 ajax 请求,但得到了这个:
被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。
由于我无权访问服务器,因此无法将“Access-Control-Allow-Origin”设置为 true,因此我决定转而使用带有 Flask 后端的 Python 请求库进行调用。我尝试将用户凭据与 GET 请求一起传递,如下所示:
headers = {'accept': 'application/json;odata=verbose'}
r = requests.get(url, auth=HTTPBasicAuth(userid, password), headers=headers)
print r.status_code #prints 403
print r.content #prints 403 forbidden
Run Code Online (Sandbox Code Playgroud)
有没有办法访问这样的资源?请注意,SSO 是使用 SAML 2.0 配置的
更新: 跟踪 giaco 建议的链接后,我现在可以以编程方式登录到 SSO。至少,我认为是这样..(s.post(..) 返回的 HTML 实际上仍然有 403 禁止代码——但是当我在浏览器中点击 url 时,它重定向到登录页面)但是,当我发送 GET请求,我再次收到 403 FORBIDDEN 消息。以下是更新后的代码:
payload = {
'UserName': username,
'Password': password
}
print "configured payload" #successfully printed on console
with requests.Session() as s:
p = s.post("my_sso_url", data=payload)
# print the html returned or something more intelligent to see if it's a successful login page.
print p.text #Successfully printing the html code of an interstetial page which later redirects to logged-in page
# An authorised request.
r = s.get('secure web page url') #<------Line A
print "sent get request" # gets printed on console
print r.text # prints 403 FORBIDDEN
Run Code Online (Sandbox Code Playgroud)
更新 2: 因此,我手动登录到 SSO,然后在代码中的“A 行”上发出 GET 请求,但仍然收到 403 Forbidden。我可能是错的,但我相信它与 cookie 有关,即也许我需要在 A 行发出 GET 请求时传递更多信息。非常感谢任何指针/提示/帮助!
更新 3: 在 C# 中使用 CA SSO 找到了类似的实现。我的服务器虽然实现了 OASIS SAML。这是链接: 从 C# 桌面应用程序到受 Siteminder 保护的服务器的 HTTP 请求 如果有人可以帮助我将 C# 代码转换为 python 或提供任何提示/指针 - 这将是一个巨大的帮助!目前,我在 Python 中将 autoredirect 设置为 false 时遇到问题 - 应用了如何防止 Python 的 urllib(2) 跟随重定向但仍然收到 403 FORBIDDEN 消息中的解决方案。
归档时间: |
|
查看次数: |
10079 次 |
最近记录: |