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

Playwright中Azure AD B2C ROPC流API认证:存储状态失效问题

加速Playwright中Azure AD B2C认证的E2E测试流程

我正尝试加速Playwright E2E测试中的认证流程,当前采用的UI登录方式每个账号耗时30-60秒,我们的应用使用Azure AD B2C进行身份验证。

已尝试方案

  • ROPC令牌端点 - 已通过API成功获取access token:
const response = await fetch(tokenEndpoint, {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    grant_type: 'password',
    client_id: clientId,
    scope: scope,
    username: email,
    password: password,
  })
});
const { access_token } = await response.json();
  • 创建包含令牌的存储状态 - 应用未识别为已登录
  • 请求拦截器 - 为所有API请求注入Authorization: Bearer ${token}请求头 - 应用仍显示登录页面
  • 混合方案 - 通过API获取令牌后,打开浏览器并注入到localStorage,刷新页面 - 应用仍重定向至B2C登录页

问题分析

对比API生成与UI生成的存储状态后发现,UI登录会在.b2clogin.com域下创建B2C SSO Cookie(x-ms-cpim-sso、x-ms-cpim-csrf),这些是仅在基于浏览器的OAuth重定向流程中设置的httpOnly Cookie。应用似乎依赖这些B2C会话Cookie来维持认证状态,而非仅依赖access token。

疑问

是否有人成功在Playwright中实现Azure AD B2C的API认证?能否无需完整UI登录流程即可建立B2C会话Cookie?还是我们只能依赖B2C的UI认证方式?

环境

  • Playwright
  • 启用ROPC策略的Azure AD B2C
  • Angular SPA前端

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 18:04:53