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

使用Python Requests调用Azure AADB2C认证时遇G21错误的排查求助

AADB2C认证G21错误诊断方法

以下是针对你遇到的AADB2C G21错误的具体诊断步骤,结合你已有正常运行代码的情况,重点通过对比排查问题:

  • 逐行对比正常代码与异常代码的请求细节

    • 核对请求URL:检查租户ID、策略名称、端点路径(如/oauth2/v2.0/token或自定义策略端点)是否完全一致,B2C策略名称的大小写、拼写错误是常见诱因
    • 对比请求头:重点检查Content-Type、User-Agent、Referer、Authorization(若有),部分B2C策略会校验User-Agent是否为合法客户端,或Referer是否匹配允许的域名
    • 校验请求体参数:逐一对比所有表单字段(如username、password、grant_type、client_id、scope、nonce、state等)的字段名、大小写、值的格式,尤其注意是否遗漏浏览器请求中包含的隐藏字段(如__RequestVerificationToken这类防伪令牌),以及密码等含特殊字符的参数是否正确编码
  • 检查请求编码与格式一致性

    • 确认请求体的编码方式:若浏览器使用application/x-www-form-urlencoded,则需用Requests的data参数传递表单数据,而非json参数(后者会发送application/json格式的请求,多数B2C令牌端点不支持)
    • 验证参数的URL编码:确保特殊字符(如&、=、@)已正确编码,浏览器会自动处理这类编码,手动编写代码时容易遗漏
  • 排查状态参数与令牌有效性

    • 若使用授权码流程:确认code未过期、state与授权请求时完全一致、nonce匹配之前生成的随机值且未重复使用
    • 若使用密码流:检查grant_type是否为password,client_id是否正确,且该客户端在B2C租户中已被允许使用密码流(部分租户会禁用该流程)
  • 模拟浏览器请求上下文

    • 复用浏览器请求的Cookie:将浏览器正常请求中的Cookie复制到Requests的cookies参数中,部分B2C策略依赖会话Cookie验证请求来源合法性
    • 完全复制浏览器的请求头:包括Accept、Accept-Language等看似无关的字段,部分严格的B2C环境会对这些字段做校验
  • 启用Requests调试日志

    • 开启详细日志查看实际发送的请求内容,对比正常请求的细节:
      import logging
      import requests
      from http.client import HTTPConnection
      
      HTTPConnection.debuglevel = 1
      logging.basicConfig()
      logging.getLogger().setLevel(logging.DEBUG)
      requests_log = logging.getLogger("requests.packages.urllib3")
      requests_log.setLevel(logging.DEBUG)
      requests_log.propagate = True
      
    • 运行异常代码后,查看日志中的请求行、请求头、请求体,与正常请求的抓包内容逐字节对比,找出差异点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:40:23