如何在成功的weblogin SSO身份验证后处理javascript内容并重定向?

时间:2015-09-06 16:53:44

标签: python authentication single-sign-on python-requests qtwebkit

我正在编写一个python脚本,从我的学校网站下载课程内容(mp4,pdf)。我的学校使用Weblogin SSO身份验证来访问任何受保护的URL。

我可以使用下面脚本的第一部分验证我的凭据:

#1. Authenticate
login_url = "https://weblogin.MY_SCHOOL.edu/login"
payload = {'login':'my_loging','password':'my_pass'}
target_url = "https://My_SCHOOL.instructure.com/courses/12345678""

with requests.Session() as c: 
    req_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36}'}
    c.headers.update(req_headers)
    c.get(login_url) # to get cookies
    c.post(url1, data=payload) #,headers = req_headers)

#2. get html from target site
    W1 = c.get(target_url)
    print(W1.url)
    print(W1.text)

#3. parse html and download content.
    #tbc

我可以看到我的身份验证在c.post.text中成功,但是当我尝试在相同的request.session()中使用get()访问任何目标站点时,我没有得到预期的我的类的html内容,而是一条消息:

  

"由于您的浏览器不支持JavaScript,因此您必须按   继续按钮一次以继续"

目标网址重定向到此网址:

  

" https://idp.MY_SCHOOL.edu/idp/profile/SAML2/Redirect/SSO"

为什么在成功进行SSO身份验证后无法访问目标网址?我不确定请求模块中的javascript支持是否是这里的问题,因为即使我在我的互联网浏览器中禁用JS支持,我也能看到target_url的一些html内容,尽管不是全部。我的get()请求卡在重定向的网址中似乎很奇怪:" https:... / SAML2 / Redirect / SSO"

我很感激有关如何解决这个问题的任何指示。我不想使用硒或机械化等网络驱动程序。我使用QtWebkit来呈现Javascript内容,但我不知道是否可以将我的身份验证cookie从request.session()传输到QtWebkit。

非常感谢任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

我不是SSO的专家,但我想我知道发生了什么。在典型情况下,您的浏览器会将您的登录凭据发布到登录URL。响应将是包含表单的html页面。表单将包含您的SSO令牌。在html页面中,嵌入式javascript会将表单提交给您尝试访问的应用程序。应用程序将验证令牌,然后授予您访问权限。启用javascript后,会无缝地发生这种情况。如果您在浏览器中关闭javascript并尝试登录,则会收到相同的消息,您必须按一个按钮才能提交包含令牌的表单。要通过脚本执行此操作,您将不得不解析表单,获取令牌值,然后自己发布。