如何用自包含JWT访问令牌调用WSO2IS /userinfo端点及排障
刚好之前踩过类似的WSO2IS坑,我来一步步帮你搞定这个/userinfo端点的调用问题~
一、正确调用/userinfo端点的姿势
首先得确保你的请求格式完全正确,很多时候"无效令牌"的报错都是格式问题导致的:
- 先确认你的JWT令牌是合法获取且未过期的:必须是通过授权码、密码或客户端凭证等标准OAuth2流程从WSO2IS拿到的自包含JWT令牌(不是UUID格式的引用令牌)
- 请求头的Authorization格式要严格遵守规范:
Authorization: Bearer <你的完整JWT令牌>,重点注意:- Bearer后面必须有一个空格
- 不要加任何多余的字符(比如你报错里的
token= 'invalid token',大概率是你把请求头写成了Bearer token='xxx'这种错误格式)
- 请求方式用
GET或POST都可以,推荐用GET,给你个curl示例:
curl -X GET \ https://<你的WSO2IS域名>:<端口>/oauth2/userinfo \ -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ij...'
二、配置WSO2IS支持自包含JWT令牌调用/userinfo
默认WSO2IS其实支持自包含JWT令牌,但可能需要调整以下配置来确保生效:
1. 服务提供者层面设置令牌类型
登录WSO2IS的Carbon管理控制台后:
- 进入Service Providers,找到你的目标服务提供者并点击编辑
- 进入OAuth/OpenID Connect Configuration,点击对应OAuth配置的Edit按钮
- 在Access Token Type选项里选择
JWT,保存配置
2. 全局配置文件调整
打开WSO2IS主目录下的deployment.toml文件,添加或确认以下配置:
# 开启自包含令牌的验证 [oauth.token_validation] enable_self_contained_token_validation = true # 设置默认的访问令牌类型为JWT [oauth] access_token_type = "JWT"
修改完成后必须重启WSO2IS服务才能生效。
3. 检查JWT令牌的必要声明
如果令牌本身缺少关键声明,也会被判定为无效,你可以用本地的JWT解码工具(别用线上工具泄露敏感信息)检查:
aud(受众):必须包含你的服务提供者的Client IDexp(过期时间):必须在当前时间之后iss(签发者):必须和WSO2IS的域名一致(比如https://你的IS域名:端口/oauth2/token)
排错小技巧
如果还是报错,建议打开WSO2IS的调试日志:
- 找到
repository/conf/log4j2.properties文件,把logger.org-wso2-carbon-identity-oauth2.level设为DEBUG - 重启服务后查看
repository/logs/wso2carbon.log,里面会有具体的错误原因(比如签名验证失败、声明缺失、令牌格式错误等)
内容的提问来源于stack exchange,提问作者Max Li
相关产品推荐
相关产品推荐

