如何在WSO2 APIM中限制用户仅在沙箱环境执行API
在WSO2中实现沙箱/生产环境API权限隔离的方案
我之前刚好在WSO2 API Manager里配置过完全相同的需求,其实你注意到的那两个自动生成的角色就是核心解决点!下面给你一步步拆解具体操作:
1. 明确自动生成角色的作用
WSO2在创建应用时生成的Application/user_application_SANDBOX和Application/user_application_PRODUCTION角色,是绑定到具体应用的环境专属角色:
SANDBOX角色默认赋予应用访问对应API沙箱环境的权限PRODUCTION角色则对应API生产环境的访问权限
默认情况下,普通用户的应用只会被分配SANDBOX角色,不会自动获得PRODUCTION角色,这正好契合你的需求基础。
2. 给API配置环境级权限控制
进入API Publisher控制台,编辑你要发布的API,切换到「Permissions」标签页:
- 针对沙箱环境:添加
Application/user_application_SANDBOX角色,确保所有订阅该API的普通应用都能获取沙箱访问权限 - 针对生产环境:只添加你自定义的专属角色(比如手动创建
PRODUCTION_AUTHORIZED_CLIENTS角色),不要添加默认的PRODUCTION角色——这样只有你指定的客户才能获得生产环境的访问权限
3. 给特定客户的应用分配生产权限
对于达成协议的特定客户,你需要手动为他们的应用配置生产访问权限:
- 进入Carbon Console的「User Management」模块
- 找到目标客户的应用(格式为
user_application,对应用户创建的应用名称) - 给该应用添加你在第二步中创建的
PRODUCTION_AUTHORIZED_CLIENTS角色,或者直接添加Application/user_application_PRODUCTION角色 - 保存后,该应用就能订阅并访问API的生产环境了
4. 验证权限隔离效果
完成配置后,你可以分别用普通用户和特定客户的应用测试:
- 普通用户的应用只能看到API的沙箱订阅选项,尝试订阅生产环境会被权限拦截
- 特定客户的应用可以正常订阅并调用生产环境的API
额外优化建议
如果需要更严格的访问控制,可以在网关层面添加自定义 mediation 序列:
- 拦截所有API请求,检查请求的环境标识(比如请求头或URL中的
environment参数) - 验证当前用户/应用的角色是否匹配对应环境的权限,不匹配则直接返回403错误
内容的提问来源于stack exchange,提问作者Sourcerer
相关产品推荐
相关产品推荐

