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

OpenIddict提示缺少必填code_challenge参数 部分场景请求失败排查

问题根因

你在两处配置中强制要求所有授权码流必须携带PKCE(Proof Key for Code Exchange)参数:

  • OpenIddict服务端全局配置:.AllowAuthorizationCodeFlow().RequireProofKeyForCodeExchange() 全局要求所有授权码流请求必须传code_challenge
  • 客户端注册配置:Requirements = { Requirements.Features.ProofKeyForCodeExchange } 单独要求该客户端发起的授权码流必须传PKCE参数

你自己的C# Razor应用使用的ASP.NET Core内置OpenIdConnect中间件,默认会自动生成并携带PKCE参数,所以请求不会报错。而oidcdebugger默认未开启PKCE选项、Azure B2C用户流默认未配置PKCE参数传递时,请求就会缺少必填的code_challenge触发报错。

解决方案

根据你的业务需求选择以下两种方案之一:

方案1:保留强制PKCE校验(安全性更高,推荐)

配置Azure B2C用户流在发起授权请求时携带PKCE参数:

  • 进入Azure Portal的Azure AD B2C管理界面,找到你用于对接的用户流
  • 进入「属性」配置页,找到「Proof Key for Code Exchange (PKCE)」选项,设置为「必需」
  • 保存配置后重新测试即可

如果使用oidcdebugger测试,勾选页面上的「Use PKCE」选项再发起请求。

方案2:关闭强制PKCE校验

删除两处强制PKCE的配置即可:

  1. 移除OpenIddict服务端配置中的.RequireProofKeyForCodeExchange(),修改为:
options
.AllowAuthorizationCodeFlow()
.AllowRefreshTokenFlow();
  1. 移除客户端注册配置Requirements列表中的Requirements.Features.ProofKeyForCodeExchange项
  2. 重新启动身份认证服务端生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:04