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的配置即可:
- 移除OpenIddict服务端配置中的
.RequireProofKeyForCodeExchange(),修改为:
options .AllowAuthorizationCodeFlow() .AllowRefreshTokenFlow();
- 移除客户端注册配置
Requirements列表中的Requirements.Features.ProofKeyForCodeExchange项 - 重新启动身份认证服务端生效
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

