Python SAML 身份验证自动化

时间:2021-02-01 22:59:58

标签: python saml

我正在尝试一个项目,该项目收集我所有每月的公用事业金额并分散欠我室友的金额。我已经设法以编程方式登录到两个网站,但我在最后一个网站上遇到了问题,因为它们使用的是 SAML (https://www.blackhillsenergy.com/)。我已经使用 Chrome 的开发人员工具检查了网络请求,但没有取得任何突破。我尝试使用 requests_ecp 但我也没有任何运气。我得到了 SAML 的想法,但很难理解它们的实现以及如何在我的脚本中使用它。下面是我的示例代码?有什么想法吗?

def get_bh_bill():

    url = 'https://www.blackhillsenergy.com/cpm/v1/user/accounts?username={fill here}'
    bh_login = ''
    bh_pass = ‘'

    # Start a session so we can have persistent cookies
    session = requests.session()

    session.auth = HTTPECPAuth('https://sso.blackhillsenergy.com', username=bh_login, password=bh_pass)
    acc_res = session.get(url)
    acc_soup = BeautifulSoup(acc_res.text, "html.parser")


    print(acc_soup.prettify())

    return '0000'

1 个答案:

答案 0 :(得分:0)

SAML 通常是这样工作的。

您访问了所需的站点,他们发现您未通过身份验证,因此他们创建了一个 SAML 请求,将其路由到您的浏览器,然后将您发送到 IdP,即身份提供商。

IdP 读取 SAML 请求,然后要求您提供凭据。通过身份验证后,它会创建一个 SAML 响应,并通过您的浏览器将其路由回原始站点。

路由是通过呈现一个简单的 HTML 表单来完成的,其中包含 SAML 请求/响应,以及少量的 javascript 来提交它。这就是它跨域移动信息的方式(SAML 通常跨域完成,这就是它不使用 cookie 的原因。)

您的脚本需要做的基本上是遵循工作流程,自动提交表单,在询问时登录,然后将表单提交回来。这是一个多步骤的工作流程。也可能涉及大量重定向。

enter image description here