如何使用JWT令牌访问WSO2 API Manager中的API
使用JWT令牌访问WSO2 API Manager的API 详细指南
嗨,我来一步步教你怎么用JWT令牌访问WSO2 API Manager上的API,这些都是实际操作里总结的方法,跟着来就行!
一、前期准备
在开始之前,你得确保这些前提条件都满足:
- WSO2 API Manager(以下简称APIM)实例已经正常运行,你能访问开发者门户和发布者门户
- 已经在APIM上发布了需要访问的API(如果还没发布,先去发布者门户创建并发布API)
- 有一个APIM的开发者账号,并且已经注册了一个应用(在开发者门户里创建应用,把目标API添加到这个应用里,获取对应的客户端ID和客户端密钥)
二、获取JWT令牌的两种常用方式
WSO2 APIM支持多种OAuth2授权流来获取JWT令牌,这里讲最常用的两种:
1. 密码模式(适合后端服务、测试场景)
这种方式直接用用户名密码获取令牌,步骤简单:
- 打开终端或者API测试工具(比如Postman),发送POST请求到APIM的Token端点:
curl -k -d "grant_type=password&username=<你的APIM用户名>&password=<你的密码>&client_id=<应用的客户端ID>&client_secret=<应用的客户端密钥>" https://<APIM主机地址>:<端口>/oauth2/token注:
-k参数是跳过SSL证书验证,生产环境建议配置有效证书后去掉这个参数 - 响应里的
access_token字段就是你需要的JWT令牌!你可以复制这个令牌到jwt.io(本地解码即可,无需上传数据)查看里面的声明信息,比如有效期、用户信息、权限范围等。
2. 授权码模式(适合生产环境、前端/第三方应用)
这种方式更安全,需要用户手动授权,步骤如下:
- 第一步:构造授权请求URL,在浏览器里打开:
登录你的APIM账号后,会跳转到你配置的重定向URI,URL里会带上https://<APIM主机地址>:<端口>/oauth2/authorize?response_type=code&client_id=<应用的客户端ID>&redirect_uri=<你在应用里配置的重定向URI>&scope=<API的权限范围(可选)>code参数,这就是授权码。 - 第二步:用授权码换JWT令牌,发送POST请求:
同样,响应里的curl -k -d "grant_type=authorization_code&code=<获取到的授权码>&redirect_uri=<和之前一致的重定向URI>&client_id=<应用的客户端ID>&client_secret=<应用的客户端密钥>" https://<APIM主机地址>:<端口>/oauth2/tokenaccess_token就是JWT令牌。
三、用JWT令牌调用API
拿到令牌后,就可以调用目标API了:
- 首先找到API的调用地址:在开发者门户的API详情页,你能看到API的上下文、版本,拼接成完整的URL,格式一般是:
https://<APIM主机地址>:<端口>/t/<租户域名>/<API上下文>/<API版本>/<资源路径>注:如果是单租户环境,租户域名默认是
carbon.super - 发送请求时,在请求头里添加
Authorization: Bearer <你的JWT令牌>,比如用curl:
正常情况下,你就能收到API的响应了!curl -k -H "Authorization: Bearer <JWT令牌>" https://<APIM主机地址>:<端口>/t/carbon.super/my-api/v1/hello
四、关键配置与注意事项
- API安全策略配置:要确保你的API允许JWT令牌访问。去发布者门户编辑API,进入「运行时配置」→「安全」,选择「OAuth2/JWT」,并关联你创建的应用。
- 令牌有效期:默认JWT令牌有效期是1小时,如果需要调整,修改APIM的
deployment.toml文件:
修改后重启APIM生效。[oauth2.token] access_token_validity = 3600 # 单位:秒,这里是1小时 - 自定义JWT声明:如果需要在JWT里添加自定义字段,可以通过APIM的身份提供商配置,或者编写自定义调解器来实现。
五、常见问题排查
- 401 Unauthorized错误:
- 检查
Authorization头格式是否正确:必须是Bearer+ 空格 + 令牌,不要漏了空格 - 确认JWT令牌是否过期:用jwt.io解码看
exp字段,过期了就重新获取 - 检查API是否和你的应用关联,以及应用是否被激活
- 检查
- 令牌获取失败:
- 确认客户端ID、客户端密钥、用户名密码是否正确
- 检查APIM的OAuth2端点是否可达,端口是否正确(默认是9443)
- 如果是授权码模式,确认重定向URI和应用里配置的完全一致
内容的提问来源于stack exchange,提问作者suresh kumar
相关产品推荐
相关产品推荐

