我们在一些代理服务器后面有一个WSO2 APIM部署(2.0.0)。在创建应用程序或从商店生成访问令牌时,我们遇到以下异常:
ERROR {org.wso2.carbon.apimgt.impl.utils.APIUtil} - Error occurred while executing SubscriberKeyMgtClient. {o
rg.wso2.carbon.apimgt.impl.utils.APIUtil}
java.lang.RuntimeException: Error occurred while calling token endpoint: HTTP error code : 301
at org.wso2.carbon.apimgt.impl.AMDefaultKeyManagerImpl.getNewApplicationAccessToken(AMDefaultKeyManagerImpl.java:367)
at org.wso2.carbon.apimgt.impl.workflow.AbstractApplicationRegistrationWorkflowExecutor.dogenerateKeysForApplication(AbstractApplicationRegistra
tionWorkflowExecutor.java:151)
at org.wso2.carbon.apimgt.impl.workflow.AbstractApplicationRegistrationWorkflowExecutor.generateKeysForApplication(AbstractApplicationRegistrati
onWorkflowExecutor.java:118)
at org.wso2.carbon.apimgt.impl.workflow.ApplicationRegistrationSimpleWorkflowExecutor.complete(ApplicationRegistrationSimpleWorkflowExecutor.jav
a:78)
at org.wso2.carbon.apimgt.impl.workflow.ApplicationRegistrationSimpleWorkflowExecutor.execute(ApplicationRegistrationSimpleWorkflowExecutor.java
:54)
at org.wso2.carbon.apimgt.impl.APIConsumerImpl.requestApprovalForApplicationRegistration(APIConsumerImpl.java:2789)
at org.wso2.carbon.apimgt.impl.UserAwareAPIConsumer.requestApprovalForApplicationRegistration(UserAwareAPIConsumer.java:36)
at org.wso2.carbon.apimgt.hostobjects.APIStoreHostObject.jsFunction_getApplicationKey(APIStoreHostObject.java:385)
...
Caused by: java.lang.RuntimeException: Error occurred while calling token endpoint: HTTP error code : 301
at org.wso2.carbon.apimgt.impl.AMDefaultKeyManagerImpl.getNewApplicationAccessToken(AMDefaultKeyManagerImpl.java:367)
at org.wso2.carbon.apimgt.impl.workflow.AbstractApplicationRegistrationWorkflowExecutor.dogenerateKeysForApplication(AbstractApplicationRegistra
我假设某些代理服务(我们可能没有直接控制)在生成令牌时返回HTTP 301.
我想查看使用AMDefaultKeyManagerImpl中的哪些数据真正调用哪个URL并检查实际返回的内容。
我无法找到AMDefaultKeyManagerImpl或APIStoreHostObject,也找不到真正调用的端点。
感谢您提供任何提示/建议
修改
我发现实现here虽然它在不同的包中(较新的版本?)。
此处检索端点:
String tokenEndpoint =
ServiceReferenceHolder.getInstance().getAPIMConfiguration()
.getKeyManagerConfigs().getTokenEndpoint();
虽然不知道如何计算端点(APIKeyManager部分被注释,你假设使用本地/自助服务,它正在另一个环境中工作)
生成应用程序密钥或应用程序访问令牌时会遇到异常,这里是stacktrace。
当客户端调用HTTP端点时,我看到可能的301响应,但我看到只有https配置到处
<RevokeAPIURL>https://api.xxxxxx:443/api/revoke</RevokeAPIURL>
其中/ api在代理服务器上映射到axis2 http端口(如果是网关)
解决:
令牌端点派生自RevokeAPIURL参数(如果未定义单独的KeyManager,则将“revoke”替换为“token”字符串)。该实现使用Host头向端点发送正确的HTTP(S)请求。使用主机头时,问题是代理服务配置路由错误
答案 0 :(得分:0)
确保在api-manager.xml
<RevokeAPIURL>https://${GATEWAY_SERVER_HOST}:{port}/revoke</RevokeAPIURL>
您可以为${GATEWAY_SERVER_HOST}
和{port}
添加实际值。
答案 1 :(得分:0)
关注此blog。另外,请确保您没有任何违反约束条件的重复记录。这主要发生在将wso2-am从1.9.0迁移到2.1.0时。