隐式流包含自定义声明但PKCE授权码流对应声明缺失问题咨询
问题根因
该问题由Azure AD B2C自定义策略中授权码流与隐式流的令牌生成逻辑差异导致:
- 隐式流(
response_type=id_token)在用户完成身份验证流程后,直接在授权端点读取依赖方(RelyingParty)配置的OutputClaims生成ID令牌返回,因此你在依赖方中配置的两个自定义声明可以正常返回。 - 授权码流(
response_type=code)分为两步:第一步用户完成流程后生成授权码,同时持久化当前上下文的声明集;第二步使用授权码兑换令牌时,会直接调用JwtIssuer技术配置生成ID令牌和访问令牌,不会再读取依赖方的OutputClaims配置。你当前的配置存在两处缺失:- 未在
JwtIssuer技术配置的OutputClaims列表中添加displayName和organization声明,生成令牌时不会将这两个字段写入最终返回的令牌中 - 生成授权码的编排步骤未将两个自定义声明纳入持久化范围,兑换令牌时无法从授权码关联的缓存中读取到对应值
- 未在
修复方案
- 找到自定义策略基础层中定义的
JwtIssuer声明提供程序,在其技术配置的OutputClaims节点下新增两个输出声明:
<OutputClaim ClaimTypeReferenceId="displayName" /> <OutputClaim ClaimTypeReferenceId="organization" />
- 检查生成授权码的编排步骤对应的技术配置,将两个声明加入持久化声明列表,确保兑换令牌时可以正常读取。
- 若需要两个声明同时出现在访问令牌中,需确认你为应用配置的API权限未过滤这两个自定义声明。
内容的提问来源于stack exchange,提问作者Jakub Bochenski
相关产品推荐
相关产品推荐

