Azure B2C:如何让声明解析器在访问令牌中生效?
问题解答
声明解析器并非仅适用于ID令牌,但Azure AD B2C对token端点的自定义参数处理逻辑和authorize端点存在差异:token端点的查询字符串参数不会自动被声明解析器捕获,因为该端点核心职责是处理授权码/刷新令牌交换,默认不会保留这类自定义参数。
以下是两种可行的解决思路:
方案1:通过授权码流程传递参数(推荐)
在authorize端点传入自定义参数(如custom_param=xxx),利用声明解析器捕获后将其存入授权码的上下文数据中,再在令牌颁发流程中从授权码上下文提取该参数并添加到访问令牌:
- 在用户旅程的
TechnicalProfile里,使用OAuth2KeyValue声明解析器捕获authorize端点的参数,示例配置如下:<OutputClaim ClaimTypeReferenceId="customParam" DefaultValue="{OAuth2KeyValue:custom_param}" AlwaysUseDefaultValue="true" /> - 确保该声明被包含在授权码颁发的
TechnicalProfile输出中,让参数嵌入授权码上下文。 - 在负责令牌颁发的
JwtIssuer类TechnicalProfile中,添加该声明作为输出项,即可让访问令牌包含此参数。
方案2:利用B2C扩展属性临时存储(不推荐)
如果必须在token端点传递参数(不符合OAuth2规范),可通过以下方式实现:
- 配置REST API技术Profile,在
token端点调用时将自定义参数写入提前定义好的用户B2C扩展属性。 - 在令牌颁发流程中读取该扩展属性,并将其添加到访问令牌。
- 注意:此方法会修改用户属性,需谨慎处理并发场景,仅作为特殊场景下的备选方案。
需要强调的是,OAuth2规范并未定义token端点支持自定义查询参数,Azure AD B2C也无原生支持直接捕获这类参数,因此方案1是符合标准且更可靠的实现方式。
内容的提问来源于stack exchange,提问作者marcin93w
相关产品推荐
相关产品推荐

