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

Selenium处理Azure SSO身份认证绕过相关问题咨询

核心问题原因

1. 令牌类型不匹配

你当前调用https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token接口用的是客户端凭据流,仅传入clientId、clientSecret、grant_type=client_credentials拿到的access_token是应用本身的服务身份凭证,仅用于服务到服务的接口调用,和用户身份的登录态完全无关,自然无法通过应用的用户身份校验。

2. 令牌注入逻辑错误

Azure AD 集成的应用不会直接把 Azure 返回的access_token作为Cookie存储:

  • 后端渲染的Web应用,通常会在Azure登录回调完成后,生成应用自身的会话Cookie(比如.AspNetCore.Cookies),用于后续的身份校验
  • 前端SPA应用,通常会把id_token、access_token存在localStorage/sessionStorage中,而非Cookie里
    你直接把access_token写入Cookie的操作完全不符合应用的会话存储逻辑,自然不会生效。

3. 用户名密码获取令牌的API存在但有使用限制

你要找的传入用户名密码获取令牌的接口是资源所有者密码凭据流(ROPC),接口地址和你用的一致,仅需要调整请求参数即可,但该流微软不推荐生产使用,仅可用于测试场景,且不支持开启多因素认证的账号、个人微软账号,仅可用于同租户的工作/学校账号。
ROPC流的请求参数示例:

{
  "client_id": "你的应用客户端ID",
  "client_secret": "你的应用客户端密钥(公开客户端可省略)",
  "grant_type": "password",
  "username": "测试用户账号",
  "password": "测试用户密码",
  "scope": "openid profile 你的应用API权限 offline_access"
}

该请求会返回id_token、access_token、refresh_token三个核心凭证。


解决方案

方案1:API拿凭证后注入会话(适配需要批量跑不同用户测试的场景)

  1. 用上述ROPC流拿到对应的id_token或授权码
  2. 适配你的应用会话逻辑完成注入:
    • 后端Web应用:模拟Azure AD回调流程,将授权码发送到你的应用的回调接口,拿到应用返回的会话Cookie后写入浏览器
    • 前端SPA应用:将返回的id_token、access_token、过期时间等参数写入对应localStorage/sessionStorage的指定字段
  3. 刷新页面后登录态即可生效,无需走跳转登录流程。

方案2:导出导入登录上下文(更稳定,推荐UI自动化使用)

不需要调用任何Azure AD接口,直接通过自动化工具的上下文导出功能实现免登录:

  1. 首次运行自动化时,手动/自动完成一次完整的微软登录流程
  2. 导出当前浏览器的完整上下文(包含所有Cookie、本地存储、会话存储)存为状态文件
  3. 后续所有测试用例启动时直接加载该状态文件,启动后直接是已登录状态,完全跳过登录跳转流程。
    Playwright自带storageState功能直接支持该操作,Selenium等工具也可以自行实现Cookie和存储的导出导入逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:36:03