向受SSO保护的资源

时间:2017-06-09 20:20:20

标签: python ajax https xmlhttprequest single-sign-on

我需要通过进行GET调用来访问数据,但资源受单点登录保护。我有URI端点和单点登录凭据。我开始使用XMLHttpRequest()创建ajax请求,但得到了这个:

  

被CORS政策阻止:No' Access-Control-Allow-Origin'标题是   出现在所请求的资源上。

由于我无法访问服务器,因此无法设置“访问控制 - 允许 - 来源”和#39;事实上,我决定使用带有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

有没有办法访问这样的资源? 请注意,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

更新2: 因此,我手动登录到SSO,然后在&#34;线A&#34;上发出GET请求。在代码中仍然有403禁止。我可能错了,但我认为它与cookie有关,也许我需要在A行发出GET请求时传递更多信息。 任何指针/提示/帮助都非常感谢!

更新3: 使用CA SSO在C#中找到了类似的实现。我的服务器实现了OASIS SAML。链接在这里: HTTP request from a C# desktop application to a Siteminder-protected server 如果有人可以帮助我将C#代码翻译成python或提供任何提示/指示 - 它将是一个巨大的帮助!目前,我在Python中将autoredirect设置为false时遇到了问题 - 从How do I prevent Python's urllib(2) from following a redirect应用了解决方案但仍然获得了403 FORBIDDEN消息。

0 个答案:

没有答案