如何通过WSO2 APIM为API请求添加Token授权
WSO2 APIM 添加Token授权的具体步骤
一、发布者门户(Publisher)配置
1. 修正API基础配置(纠正之前的错误)
- 登录发布者门户,创建/编辑目标API:
- 新API:点击「Create API」→「Design a New API」,填写API名称、版本,上下文设为
/country,生产/沙箱端点填http://199.3x.xx.3x:4041/。 - 已有API:找到对应API进入编辑模式,修改上下文和端点至上述配置。
- 新API:点击「Create API」→「Design a New API」,填写API名称、版本,上下文设为
2. 配置API资源映射
- 进入「Resources」标签页,点击「Add Resource」:
- 请求方法选择
POST,资源路径填/usa,确保API的完整路径/country/usa与后端路径完全匹配。 - 在「Endpoint」下拉框选择已配置的生产/沙箱端点,完成路径映射。
- 请求方法选择
3. 启用OAuth2 Bearer授权
- 进入「Security」标签页,找到「Security Schemes」:
- 点击「Add Security Scheme」,选择
OAuth2类型,填写方案名称(如BearerAuth),勾选「Enable」,Token类型选择OAuth2。 - 保存安全方案后,回到「API Security」区域,将
BearerAuth添加到API的安全方案列表并启用。
- 点击「Add Security Scheme」,选择
4. 配置授权头传递(确保后端接收令牌)
- 进入「Message Mediation」标签页,点击「Add Mediator」选择「Header Mediator」:
- 方向设置为「Outgoing Request」(网关转发至后端的请求)。
- 头名称填
Authorization,值设为$ctx:Authorization,实现客户端授权头直接透传到后端。
- 保存配置后,点击「Publish API」发布到网关。
二、开发者门户(Devportal)配置
1. 创建应用并生成密钥
- 登录开发者门户,点击「Applications」→「Add Application」,填写应用名称、描述,访问级别选「Production and Sandbox」。
- 进入「Keys」标签页,点击「Generate Keys」,选择
OAuth2.0类型,根据业务场景选授权类型:- 服务端调用选
Client Credentials;用户级调用选Password。
- 服务端调用选
2. 订阅目标API
- 在开发者门户「APIs」列表找到已发布的API,点击「Subscribe」,选择刚创建的应用,确认订阅。
3. 获取Bearer令牌
根据授权类型调用令牌端点(默认地址为https://<APIM_HOST>:9443/oauth2/token):
- Client Credentials模式示例:
curl --location --request POST 'https://<APIM_HOST>:9443/oauth2/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'client_id=<你的客户端ID>' \ --data-urlencode 'client_secret=<你的客户端密钥>'
- Password模式示例:
curl --location --request POST 'https://<APIM_HOST>:9443/oauth2/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=password' \ --data-urlencode 'client_id=<你的客户端ID>' \ --data-urlencode 'client_secret=<你的客户端密钥>' \ --data-urlencode 'username=<用户账号>' \ --data-urlencode 'password=<用户密码>'
从返回结果中提取access_token,格式为Bearer <access_token>。
4. 调用带授权的API
通过APIM网关地址(默认https://<APIM_HOST>:8243)发起请求,携带授权头:
curl --location 'https://<APIM_HOST>:8243/country/usa' \ --header 'Content-Type: application/json' \ --header 'language: english' \ --header 'culture: /' \ --header 'Authorization: Bearer <你的access_token>' \ --data '{ "info": [ { "city": "newyork" } ] }'
三、之前配置失效的原因说明
- 错误将
usa设为「设备(devices)」,正确做法是将/usa作为API资源路径,配合/country上下文形成完整请求路径。 - 未启用OAuth2安全方案,导致网关不校验令牌,也无法正确传递授权头到后端。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

