无法在id_token或userinfo请求中获取Claims的技术求助
问题描述
按照Banno Consumer API文档尝试获取登录用户的CIF(customer_identifier)和Tax Id,已完成以下操作但未得到目标字段:
- 授权请求中指定
scope=openid - 传入Claims参数(可读格式:
claims={"id_token":{"https://api.banno.com/consumer/claim/customer_identifier":null}}) - 已确认外部应用在Banno门户中配置了对应Claims权限
- 尝试调用UserInfo端点(
/a/consumer/api/v0/oidc/me)并将Claims键改为userinfo,仅返回sub字段
解码后的id_token仅包含基础字段:
"id_token": { "header": { "alg": "RS256", "typ": "JWT", "kid": "sig-rs-0" }, "body": { "sub": "sub uuid", "at_hash": "ShHf2gRtROCBdE-j_5YZkw", "aud": "aud uuid", "exp": 1668092577, "iat": 1668088977, "iss": "https://api.banno.com/a/consumer/api/v0/oidc" } }
期望响应中包含:
"https://api.banno.com/consumer/claim/customer_identifier": "AAA1234"
可能的遗漏点及解决方法
- 修正Claims参数的URL编码格式:你的URL编码后参数为
claims==%7B%22id_token%22%3A%7B%22https%3A%2F%2Fapi.banno.com%2Fconsumer%2Fclaim%2Fcustomer_identifier%22%3Anull%7D%7D,其中claims==多了一个等号,正确格式应为claims=%7B%22id_token%22%3A%7B%22https%3A%2F%2Fapi.banno.com%2Fconsumer%2Fclaim%2Fcustomer_identifier%22%3Anull%7D%7D。多余的等号会导致服务器无法正确解析Claims参数,从而不返回目标字段。 - 调整Claims参数的结构:将Claims中的
null替换为{"essential": true},明确声明该Claim为必需项,格式如下:
可读格式:claims={"id_token":{"https://api.banno.com/consumer/claim/customer_identifier":{"essential":true}}}
部分OIDC提供商要求通过essential字段明确指定需要返回的自定义Claim,而非仅传null。 - 确认UserInfo请求的AccessToken权限:调用UserInfo端点时,需确保请求中携带的AccessToken包含足够的权限(除
openid外,可能需要额外的Scope,如profile),且请求头正确设置Authorization: Bearer {access_token}。 - 验证Banno门户的Claim配置:再次检查门户中应用的Claim权限是否正确启用,确认配置已保存并生效(部分平台可能需要审批流程或配置同步时间),确保
https://api.banno.com/consumer/claim/customer_identifier和Tax Id对应的Claim已被勾选。 - 检查授权请求的完整参数:确认授权请求中除
scope和claims外,其他参数(如response_type、client_id、redirect_uri等)均正确无误,避免因其他参数错误导致服务器忽略Claims请求。
内容的提问来源于stack exchange,提问作者asdjhjaksg135263
相关产品推荐
相关产品推荐

