WSO2 API Manager - “将其设为默认版本”会导致身份验证错误吗?

时间:2014-07-10 09:39:09

标签: api wso2 wso2carbon wso2-am

我有一个API,没有问题,提供“将此设为默认版本”复选框未选中,一旦选中我收到此错误

<ams:fault 
    xmlns:ams="http://wso2.org/apimanager/security">
    <ams:code>900906</ams:code>
    <ams:message>No matching resource found in the API for the given request</ams:message>
    <ams:description>Access failure for API: xxxx/xxxx, version: v0.1 with key: xxxxxx</ams:description>
</ams:fault>

我有什么遗漏的吗?

谢谢,

灰。

编辑 - 额外明细和日志

  

TID [-1234] [AM] [2014-07-10 13:05:56,238]错误   {} org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler    - API身份验证失败org.wso2.carbon.apimgt.gateway.handlers.security.oauth.OAuthAuthenticator.authenticate(OAuthAuthenticator.java:157)   org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.handleRequest(APIAuthenticationHandler.java:92)   org.apache.synapse.rest.API.process(API.java:285)   org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:83)   org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:64)   org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220)   org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83)   org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)   org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:344)   org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:168)   org.apache.axis2.transport.base.threads.NativeWorkerPool $ 1.run(NativeWorkerPool.java:172)   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)   java.lang.Thread.run(Thread.java:744)

2 个答案:

答案 0 :(得分:0)

更改API后,请保存并发布API。这可能会导致问题。

发布后,您应该看到2套生产网址(一个包含版本,另一个没有版本)。请检查API的API商店中是否有相同的API。

答案 1 :(得分:0)

您首先要通过编辑../repository/conf/log4j.properties文件并重新启动该服务来打开该环境中的有线日志。这将允许您查看网关的初始请求和网关自身(或群集中的其他网关)的请求的请求标头,因为这样可以解决对默认API版本的请求的解决方法。这可以帮助您确定您的Authorization标头值是否实际上是通过身份验证处理程序。

在您看一下之后,请注意,当您发布具有默认版本的API时,您实际上正在为API创建(或更新)两个单独的突触配置:版本化配置和无版本配置。您需要检查后者定义的部分是:

            <else>
           <header name="WSO2_AM_API_DEFAULT_VERSION" scope="transport" value="true"/>
           <property name="uri.var.portnum" expression="get-property('https.nio.port')"/>
           <send>
              <endpoint>
                 <http uri-template="https://localhost:{uri.var.portnum}/myApi/v1">
                    <timeout>
                       <duration>60000</duration>
                       <responseAction>fault</responseAction>
                    </timeout>
                 </http>
              </endpoint>
           </send>
        </else>

默认情况下,新生成的默认版本定义会尝试将请求发送到localhost,这可能不是您想要的。检查../repository/deployment/synapse-configs/default/api并确保此定义正确。

由于看起来这实际上是一个身份验证错误,您还应该测试一个新的订阅。使用某个订阅者创建新应用程序,订阅API并生成新的访问令牌。我不明白为什么(因为设置默认版本并没有在AM_API表中创建新的API条目),但这可能是由于访问令牌凭据对于默认版本无效,并且生成新的代币应该(理论上)对此进行测试。