如何在无负载均衡器下将多个WSO2 AM关联至单个WSO2 IS?
解决方案:连接两个独立维护的WSO2 AM实例到同一WSO2 IS(无需负载均衡)
默认情况下,WSO2 IS的config.xml里的<ServerURL>只能指定单个AM网关地址,这显然满足不了你要关联两个独立AM的需求。不过我们可以通过为每个AM在IS中创建独立的服务提供者的方式来实现,具体步骤如下:
1. 为每个AM在IS中创建专属服务提供者
首先登录WSO2 IS的管理控制台,走这个路径:主菜单 > Identity > Service Providers > Add
- 给第一个团队的AM创建服务提供者(比如命名为
AM-Team-A),然后启用OAuth/OpenID Connect Configuration,点击Configure按钮 - 在
Callback URL里填第一个AM的回调地址:https://<你的AM-A主机>:<端口>/commonauth,保存后会生成专属的OAuth Client Key和Client Secret,把这俩记下来,后面要用到 - 同样的操作,给第二个团队的AM创建服务提供者(比如
AM-Team-B),填对应AM的回调地址,也记下它的Client Key和Secret
2. 分别修改两个AM的配置,指向同一IS
针对每个AM实例,打开<AM安装目录>/repository/conf/api-manager.xml:
- 找到
<KeyManager>区块,把<ServerURL>改成你的IS地址:<ServerURL>https://<你的IS主机>:<端口>/services/</ServerURL> - 填入IS的管理员账号和密码(
<Username>和<Password>字段) - 找到
<OAuth>配置块,把之前对应服务提供者的Client Key和Secret填进去:<OAuth> <ClientId>这里填对应AM的Client Key</ClientId> <ClientSecret>这里填对应AM的Client Secret</ClientSecret> <!-- 其他默认配置保持不变 --> </OAuth> - 保存配置后重启这个AM实例,另一个AM做完全一样的操作,只是用它自己的服务提供者凭证
3. 调整IS的配置以支持多AM关联
打开IS的<IS安装目录>/repository/conf/identity/identity.xml:
- 找到
<IdentityOAuthTokenGenerator>配置,确认它支持所有需要的授权类型(默认配置已经包含常用类型),确保这个区块是这样的:<IdentityOAuthTokenGenerator> <SupportedGrantTypes>authorization_code,password,client_credentials,refresh_token,urn:ietf:params:oauth:grant-type:saml2-bearer,iwa:ntlm</SupportedGrantTypes> <EnableTokenEncryption>false</EnableTokenEncryption> </IdentityOAuthTokenGenerator> - 如果你的IS有IP访问限制,记得在
<IS安装目录>/repository/conf/carbon.xml的<AccessControl>里添加两个AM的IP地址,确保它们能正常访问IS的服务
4. 验证配置是否生效
把IS和两个AM都启动起来:
- 在第一个AM里发布一个测试API,订阅后生成访问令牌,检查令牌是否由IS签发(可以用JWT解析工具查看
issuer字段) - 同样在第二个AM里做测试,确认两个AM都能正常用IS作为密钥管理器,而且各自的令牌是独立管理的,不会互相干扰
这个方案的核心是让每个AM以独立的服务提供者身份和IS交互,IS能区分不同AM的请求,完全不需要负载均衡器,也能满足两个团队各自维护AM的需求。
内容的提问来源于stack exchange,提问作者Rahul Desai
相关产品推荐
相关产品推荐

