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
相关产品推荐
相关产品推荐

