WSO2 APIM无法从商店

时间:2017-05-30 14:04:09

标签: wso2 wso2-am

我们在一些代理服务器后面有一个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)请求。使用主机头时,问题是代理服务配置路由错误

2 个答案:

答案 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时。