WSO2 APIM 无法从商店创建访问令牌

WSO2 APIM unable to create an access token from the store

我们在一些代理服务器后面部署了 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

我假设某些代理服务(我们可能无法直接控制)returns HTTP 301 在生成令牌时。

我想看看 URL 是用来自 AMDefaultKeyManagerImpl 的什么数据真正调用的,并检查真正返回的是什么。

我无法找到 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" 字符串)。该实现向具有主机 header 的端点发送正确的 HTTP(S) 请求。问题出在使用主机 header

时代理服务配置路由不正确

确保在 api-manager.xml

中正确配置撤销 url
<RevokeAPIURL>https://${GATEWAY_SERVER_HOST}:{port}/revoke</RevokeAPIURL>

您可以为 ${GATEWAY_SERVER_HOST}{port} 输入实际值。

关注此 blog。还要确保您没有任何违反约束的重复记录。这主要发生在将 wso2-am 从 1.9.0 迁移到 2.1.0 时。