WSO2 API管理器-“;将此设置为默认版本";导致身份验证错误?

WSO2 API管理器-“;将此设置为默认版本";导致身份验证错误?,api,wso2,wso2carbon,wso2-am,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&l

我有一个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>

900906
在API中找不到与给定请求匹配的资源
访问API:xxxx/xxxx的失败,版本:v0.1,密钥:xxxxxx
有什么我错过的吗

谢谢

灰烬

编辑-额外细节和日志

TID[-1234][AM][2014-07-10 13:05:56238]错误 {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.HandlerRequest(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.processnonentityenclosuringresthandler(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) run(Thread.java:744)


对API进行更改后,请保存并发布API。这可能是问题的根源


发布后,您应该会看到两组产品url(一个有版本,一个没有版本)。请检查API存储区中是否有相同的API

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

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

            <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>

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


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

Hi Nadeesha,实际上我已经这样做了,并且看到存储中有两个URL,但是这两个URL都不起作用,并且都失败了,出现了相同的错误(为了论证起见,我刚刚尝试了,但它们仍然不起作用)。然而,只要我将API更改为非默认API,版本化的API就会工作。我在问题中增加了碳记录的细节,这是否有帮助?谢谢,阿什。我尝试了生产和沙盒凭据,沙盒是我正在使用的,没有默认复选框也可以使用,但复选框后相同的身份验证密钥不起作用。同样适用于我。我不确定这个问题的原因是什么