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

使用Selenium处理SAML认证302重定向时的凭证传递问题

解决Selenium处理SAML重定向时的身份认证问题

方案1:配置浏览器启动参数,直接支持重定向时的凭证传递

你之前把凭证拼在初始访问的home.domain.comURL上是无效的,实际需要认证的是重定向后的auth.domain.com域,按以下配置即可:

  • Chrome浏览器启动时添加如下参数(其他浏览器可查询对应配置项,逻辑一致):
    // 以Java代码为例,其他语言对应修改启动参数即可
    ChromeOptions options = new ChromeOptions();
    // 白名单需要认证的ADFS域名,允许自动传递凭证
    options.addArguments("--auth-server-whitelist=auth.domain.com");
    // 预置认证账号密码,不需要弹窗输入
    options.addArguments("--auth-basic-username=admin");
    options.addArguments("--auth-basic-password=passw0rd");
    // 禁用URL内嵌凭证的安全警告
    options.addArguments("--disable-blink-features=BlockCredentialedSubresources");
    
    配置完成后直接访问home.domain.com/run.jsp即可,重定向到ADFS页时浏览器会自动传递预置的凭证,不需要手动处理弹窗。

方案2:Selenium 4+ DevTools API注入认证凭证(兼容性更强)

如果浏览器版本不支持上述启动参数,可以用DevTools的Network.setExtraHTTPHeaders方法提前注入Authorization头,适配所有重定向请求:

  • 核心代码示例:
    DevTools devTools = driver.getDevTools();
    devTools.createSession();
    // 开启Network域监听
    devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
    // 构造Basic Auth的头信息
    String auth = "admin:passw0rd";
    String base64Auth = Base64.getEncoder().encodeToString(auth.getBytes());
    // 给所有请求自动加认证头,重定向时也会生效
    devTools.send(Network.setExtraHTTPHeaders(Headers.of(
      "Authorization", "Basic " + base64Auth
    )));
    
    这种方式不需要修改URL,所有重定向到认证域的请求都会自动带上认证信息,不会触发安全警告。

方案3:提前获取SAML断言跳过重定向流程

如果以上方案都有适配问题,可以直接调用ADFS的接口提前获取SAML断言,生成有效Cookie后直接注入Selenium的浏览器实例,不需要走重定向流程:

  1. 用后台HTTP客户端构造请求向auth.domain.com/adfs/ls/wia提交认证凭证,拿到返回的SAMLResponse参数
  2. 在Selenium中先访问一次home.domain.com的任意路径,把有效认证Cookie、Session全部注入
  3. 直接访问home.domain.com/run.jsp即可,不会触发重定向认证。

注意:如果你的ADFS配置了多因子认证,需要对应调整凭证提交的参数,上述方案默认仅适配账号密码的单因子认证场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:15:03