如何在WSO2 MI中为单个API配置多凭证实现多用户认证?
在WSO2 MI中为单个API配置多个凭证的实现方案
方案一:对接API Manager(APIM)时的配置
如果你的MI是和APIM集成部署的,直接在APIM里就能给API加多种凭证:
- 登录APIM Publisher门户,打开要配置的API编辑页
- 切到Security标签,在API Authentication区块勾选你需要的多种认证类型(比如同时选
Basic Authentication和OAuth2) - 给每种认证类型配置具体参数:
- Basic Auth:指定要用的用户存储(主存储或二级存储都行)
- OAuth2:关联对应的OAuth应用、设置令牌验证端点等
- 保存并发布API,同步到MI网关后,这个API就能用任意一种凭证访问了
方案二:独立MI部署的配置
如果MI是单独运行的,有两种配置方式:
方式1:直接编辑API的Synapse配置文件
- 找到MI部署目录下
repository/deployment/server/synapse-configs/default/api里的目标API XML文件 - 在API的
<resource>或<api>节点下添加多个认证拦截器,比如同时支持Basic Auth和API Key的示例:<api xmlns="http://ws.apache.org/ns/synapse" name="SampleAPI" context="/sample"> <resource methods="GET" url-mapping="/data"> <inSequence> <!-- 配置Basic Auth拦截器 --> <class name="org.apache.synapse.security.handlers.authentication.BasicAuthHandler"> <property name="userstore" value="primary"/> </class> <!-- 配置API Key拦截器 --> <class name="org.wso2.carbon.apimgt.gateway.handlers.security.APIKeyHandler"/> <!-- 后续业务逻辑 --> <send> <endpoint> <address uri="http://backend-service:8080/data"/> </endpoint> </send> </inSequence> <outSequence> <send/> </outSequence> </resource> </api> - 保存文件后,要么重启MI,要么通过MI控制台的Deploy Artifacts重新部署这个API
方式2:用MI管理控制台配置
- 登录MI管理控制台(默认地址
https://<mi-host>:9445/carbon) - 进入Manage > APIs,选中目标API点Edit
- 在In Sequence里添加多个认证中介:
- 点Add > Mediator,搜
Basic Authentication Handler并添加,配置好用户存储 - 再添加
API Key Handler,完成参数设置
- 点Add > Mediator,搜
- 保存更新,配置立即生效
注意点
- 要确保每种凭证对应的组件在MI里已经启用,比如用OAuth2的话得保证APIM相关特性已安装
- 多凭证是或的逻辑,请求只要过了其中一种验证就能访问API
- 如果要实现“同时满足多种凭证”这种复杂逻辑,得自己写自定义认证拦截器
内容的提问来源于stack exchange,提问作者Sridhar Sri
相关产品推荐
相关产品推荐

