You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python请求访问JAMF遭SSO重定向,无法获取Session Token求助

解决JAMF SSO无JS限制获取Session Token的问题

当请求被重定向到SSO页面并提示需点击Continue按钮时,本质是需要提交页面内的SAML表单。因为requests不执行JavaScript,所以需要手动解析并提交这个表单,步骤如下:

  • 解析SSO页面的SAML表单,提取提交地址和所有隐藏字段(如SAMLRequest、RelayState)
  • 使用同一个Session提交表单,模拟点击Continue按钮的操作
  • 提交表单后重新请求目标页面,即可获取Session Token

修改后的代码

首先安装依赖:

pip install beautifulsoup4

修改getSessionToken函数:

def getSessionToken():
    import cookielib
    import requests
    from bs4 import BeautifulSoup

    jar = cookielib.CookieJar()
    s = requests.Session()
    s.cookies = jar

    # 初始登录请求
    resp = s.post(f'{JAMF_HOST}/?failover', data={'username': JAMF_USERNAME, 'password': JAMF_PASSWORD, 'resetUsername': ''})
    if resp.status_code != 200:
        print("Failed to Authenticate!")
        exit(1)

    # 处理SSO的SAML表单(模拟点击Continue按钮)
    soup = BeautifulSoup(resp.content, 'html.parser')
    saml_form = soup.find('form')
    if saml_form:
        form_action = saml_form.get('action')
        # 处理相对路径的action
        if not form_action.startswith('http'):
            form_action = f'{JAMF_HOST}{form_action}'
        
        # 提取所有表单字段
        form_data = {}
        for input_tag in saml_form.find_all('input'):
            name = input_tag.get('name')
            value = input_tag.get('value')
            if name:
                form_data[name] = value
        
        # 提交表单
        resp = s.post(form_action, data=form_data)
        if resp.status_code not in (200, 302):
            print("Failed to submit SSO form!")
            exit(1)

    # 请求目标页面获取session-token
    params = {"id": 29, "o": "r", "v": "management"}
    resp = s.get(f'{JAMF_HOST}/legacy/computers.html', params=params)
    
    # 提取session-token
    for line in resp.content.splitlines():
        if b"session-token" in line:
            cleaned_line = line.decode('utf-8').translate(None, '<>\"')
            return cleaned_line.split('=')[-1]
    
    print("Unable to find session token")
    return None

关键说明

  • Session复用:始终使用同一个requests.Session()实例,自动维护登录过程中的Cookie,确保身份验证状态持续有效
  • 表单解析:通过BeautifulSoup定位SAML表单,避免硬编码字段名,适配不同SSO页面的结构
  • 路径处理:判断表单action是否为完整URL,避免相对路径导致的请求错误

内容的提问来源于stack exchange,提问作者Vibelord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:18:27