3

我正在使用 WSO2 API 管理器,并添加了一个在 WSO2 ESB 中创建的 API,当尝试使用 TryIt 功能时,我在控制台日志中收到以下错误。

[2014-09-16 13:59:26,614] 错误 - APIAuthenticationHandler API 身份验证失败 org.wso2.carbon.apimgt.gateway.handlers.security.APISecurityException:API 访问失败:/Sub,版本:v1.0.0,密钥: null 在 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.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:83) 在 org.apache.synapse.rest 的 org.apache.synapse.rest.API.process(API.java:285)。 org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220) 的 org.apache.synapse.synapse 的 RESTRequestHandler.process(RESTRequestHandler.java:64)。core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) at 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(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:168) 上的 processNonEntityEnclosureRESTHandler(ServerWorker.java:344) org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java :172) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 在 java.lang.Thread.run(Unknown Source) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:168) 上的 processNonEntityEnclosureRESTHandler(ServerWorker.java:344) org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java :172) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 在 java.lang.Thread.run(Unknown Source) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)运行(未知来源)运行(未知来源)

我正在尝试发送 GET 请求,但该 API 没有参数,并且在我输入的授权字段中

Bearer XXXACCESS+TOKEN+GOES+HEREXXXX 

从高级 REST 客户端或商店中的 REST 客户端对此进行测试时,它可以工作。我已经更改了各种文件(授权、登录、令牌、撤销)中的端口号以匹配我的端口偏移量,我还在 api-manager.xml 中配置了我的 API 存储地址。

4

1 回答 1

1

当您将该特定资源添加到您的 API 时,请同时选择“OPTIONS”动词。否则会给出这个错误。

在此处输入图像描述

另外,检查您的 /etc/hosts 条目是否将“localhost”指向“127.0.0.1”而不是您机器的 IP 地址。在这种情况下,请打开

    {API-M installation DIR}/repository/conf/api-manager.xml

并且,通过添加您的 IP 地址(或主机名)适当地修改与 Swagger 相关的部分

由此,

    <!--Configuration to enable/disable sending CORS headers from the Gateway-->
    <Enabled>true</Enabled>

    <!--The value of the Access-Control-Allow-Origin header. Default values are 
        API Store addresses, which is needed for swagger to function.-->
    <Access-Control-Allow-Origin>https://localhost:9443,http://localhost:9763</Access-Control-Allow-Origin>

    <!--Configure Access-Control-Allow-Headers-->
    <Access-Control-Allow-Headers>authorization,Access-Control-Allow-Origin,Content-Type</Access-Control-Allow-Headers>

</CORSConfiguration>

为此(添加您自己的服务器 IP),

    <!--Configuration to enable/disable sending CORS headers from the Gateway-->
    <Enabled>true</Enabled>

    <!--The value of the Access-Control-Allow-Origin header. Default values are 
        API Store addresses, which is needed for swagger to function.-->
    <Access-Control-Allow-Origin>https://192.168.56.101:9443,http://192.168.56.101:9763</Access-Control-Allow-Origin>

    <!--Configure Access-Control-Allow-Headers-->
    <Access-Control-Allow-Headers>authorization,Access-Control-Allow-Origin,Content-Type</Access-Control-Allow-Headers>

</CORSConfiguration>

上面的答案假设您没有向 API Manager 添加任何端口偏移量。如果您这样做了,您还应该相应地更改上述配置中的端口值(只需将该值添加到现有端口值)。

谢谢你。

-Chathura

于 2014-09-18T19:09:00.563 回答