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

SPA通过PKCE流生成授权码报AADSTS501491错误咨询

错误原因

触发AADSTS501491: Invalid size of Code_Challenge parameter报错的直接原因是传入的code_challenge参数长度不符合Azure AD的PKCE校验规则。当前传入的code_challenge长度为96字符,远超出S256校验模式要求的合法长度范围。

code_challenge 合法取值要求

Azure AD对PKCE流的code_challenge参数校验规则与OAuth2.0官方标准完全一致:

  • 当code_challenge_method设置为S256(平台推荐的高安全级别校验方式):code_challenge是对合法code_verifier做SHA256哈希后,经URL安全Base64编码得到的固定长度字符串,长度为43~44字符。
  • 当code_challenge_method设置为plain(低安全级别,仅建议测试场景使用):code_challenge值与code_verifier完全一致,长度要求为43~128字符,仅允许包含大小写字母、数字、-、_、.、~几类字符,不支持其他特殊符号。
code_challenge 正确生成方式

code_challenge必须基于合法的code_verifier派生,不能随意构造字符串传入,完整生成步骤如下:

  1. 先生成符合要求的code_verifier
    code_verifier是一个高熵随机字符串,需满足:
  • 长度在43~128字符区间
  • 仅使用合法字符集:A-Z、a-z、0-9、-、_、.、~
    合法示例:fJd92sl_kjf.DSjf032jfds90jfdslkj32r43jfds9032jfdslk42
  1. 基于code_verifier生成S256模式的code_challenge
  • 第一步:将code_verifier以ASCII编码转成字节数组,对字节数组做SHA256哈希,得到32字节长度的二进制哈希结果
  • 第二步:对二进制哈希结果做URL安全的Base64编码:将标准Base64结果中的+替换为-、/替换为_,同时去掉末尾所有用于填充的=符号
  • 最终得到的43~44位字符串就是可直接传入请求的合法code_challenge

可以直接用以下PowerShell脚本快速生成符合要求的两个参数,无需手动计算:

# 生成随机code_verifier
$charSet = (48..57) + (65..90) + (97..122) + 45,95,46,126
$codeVerifier = -join ($charSet | Get-Random -Count 64 | ForEach-Object {[char]$_})
Write-Host "请妥善保存code_verifier,后续换令牌需要使用:`n$codeVerifier`n"

# 生成对应S256格式的code_challenge
$sha256 = [System.Security.Cryptography.SHA256]::Create()
$hashBytes = $sha256.ComputeHash([System.Text.Encoding]::ASCII.GetBytes($codeVerifier))
$codeChallenge = [System.Convert]::ToBase64String($hashBytes).TrimEnd('=').Replace('+','-').Replace('/','_')
Write-Host "授权请求使用的code_challenge:`n$codeChallenge"
Postman调试注意事项
  • 生成的code_verifier必须临时存储,后续调用/token端点用授权码兑换访问令牌时,需要传入同一个code_verifier做校验,传入值不匹配会触发PKCE校验失败错误。
  • 不要对哈希结果做十六进制编码,必须使用URL安全Base64编码,否则会出现长度不合法、哈希不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:27:27