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

Cypress实现Azure B2C OAuth2.0登录遇权限错误求助

解决Azure B2C AD集成Cypress E2E测试的登录问题

一、处理模拟用户操作登录的401错误

  • 先确认Azure B2C应用注册的重定向URI是否包含Cypress测试的域名(通常是http://localhost:端口号,注意区分http/https)
  • 检查测试环境的第三方Cookie设置:Cypress默认可能限制第三方Cookie,需在cypress.config.js中添加配置:
    module.exports = defineConfig({
      e2e: {
        experimentalSessionAndOrigin: true,
        chromeWebSecurity: false, // 临时关闭,测试完成后评估是否需要保留
      },
    });
    
  • 验证测试用户权限:确保用于测试的Azure B2C用户账号已被正确分配到应用用户组或拥有访问权限

二、解决cy.request()获取令牌的AADB2C90055错误

这个错误是因为请求令牌时缺少正确的资源范围(scope),你需要根据需求选择以下两类范围:

1. 受保护API的专属范围(推荐)

如果你的前端需要调用受Azure B2C保护的API,scope格式为:
https://<你的B2C租户名>.onmicrosoft.com/<API应用ID>/<权限名称>
示例:https://contoso.b2clogin.com/contoso.onmicrosoft.com/api/user_impersonation

2. 基础身份验证范围(用于获取ID令牌)

如果仅需完成登录获取身份凭证,可使用openid相关的基础scope:
openid offline_access profile
这类scope无需额外资源URL,直接作为参数传入即可

正确的cy.request()调用示例

cy.request({
  method: 'POST',
  url: 'https://<你的B2C租户名>.b2clogin.com/<你的B2C租户名>.onmicrosoft.com/<你的用户流名称>/oauth2/v2.0/token',
  form: true,
  body: {
    grant_type: 'password',
    client_id: '<你的应用注册客户端ID>',
    username: '<测试用户邮箱>',
    password: '<测试用户密码>',
    scope: 'https://contoso.b2clogin.com/contoso.onmicrosoft.com/api/user_impersonation openid offline_access',
    response_type: 'id_token token'
  }
}).then((response) => {
  // 将令牌存入浏览器存储,模拟登录状态
  window.localStorage.setItem('id_token', response.body.id_token);
  window.localStorage.setItem('access_token', response.body.access_token);
});

额外注意事项

  • 密码授权流(Resource Owner Password Credentials flow)仅适用于测试环境,生产环境禁止使用
  • 需在Azure门户的应用注册→认证→高级设置中,将“允许公共客户端流”设置为“是”,否则密码授权流无法生效

内容的提问来源于stack exchange,提问作者Tobias J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:40:22