WSO2 API Manager 的跨域问题

2024-03-30

我们为客户开发了一些API,并通过API Manager发布了它们。我们为客户提供了一些运行良好的 PHP 代码示例。唯一的问题是他们通过 AJAX 在与 AM 相关的域不同的域中使用这些 API。这是跨域问题吗?

我尝试使用以下标头在 API Manager 前面设置 apache 服务器,以便允许跨域

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Authorization, Content-Type, Accept
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Origin: * 

但即使使用这些标头,我在调用 AM 时仍然收到 401 Unauthorized。我尝试过直接向 AM 发出请求,而不通过 Apache(端口 8282),但我们仍然遇到同样的问题。


Answer recommended by WSO2 /collectives/wso2 Collective

是的,这是一个跨域问题。我建议你尝试一下下面的方法。

您的 API 是否允许在无身份验证类型中使用“OPTIONS”动词? [1]验证是否向 API 发送了不带 OAuth 标头的curl 请求。如果您收到带有您提到的 CORS 标头的 200 OK 响应,那么应该没问题。 前任:

curl -v -X OPTIONS http://localhost:8280/testapi

如果它没有返回成功消息,那么您的后端可能不支持 OPTIONS 方法。您可以通过直接向后端服务发送 OPTIONS 请求来验证这一点。您可以在后端服务中启用 OPTIONS,或者通过修改 API 突触配置来避免 OPTIONS 调用到达后端。

ex:-

<api name="admin--TestAPI" context="/test" version="1.0" version-type="url">
        <resource methods="POST GET OPTIONS DELETE PUT" url-mapping="/*">
            <inSequence>
                <filter source="get-property('axis2', 'HTTP_METHOD')" regex="OPTIONS">
                    <then>
                        <log level="custom">
                            <property name="Message" value="Received OPTIONS call, sending back headers"/>
                        </log>
                        <property name="Access-Control-Request-Headers" value="authorization,content-type" scope="transport"/>
                        <property name="Access-Control-Allow-Headers" value="authorization,Access-Control-Allow-Origin,Content-Type" scope="transport"/>
                        <property name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" scope="transport"/>
                        <property name="Access-Control-Allow-Origin" value="*" scope="transport"/>
                        <property name="RESPONSE" value="true" scope="default" type="STRING"/>
                        <header name="To" action="remove"/>
                        <send/>
                    </then>
                    <else>
                        <property name="POST_TO_URI" value="true" scope="axis2"/>
                        <filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
                            <then>
                                <send>
                                    <endpoint name="admin--StudentAPI_APIEndpoint_0">
                                        <address uri="http://localhost:8080/sample/1.0/one/">
                                            <timeout>
                                                <duration>30000</duration>
                                                <responseAction>fault</responseAction>
                                            </timeout>
                                            <suspendOnFailure>
                                                <errorCodes>-1</errorCodes>
                                                <initialDuration>0</initialDuration>
                                                <progressionFactor>1.0</progressionFactor>
                                                <maximumDuration>0</maximumDuration>
                                            </suspendOnFailure>
                                            <markForSuspension>
                                                <errorCodes>-1</errorCodes>
                                            </markForSuspension>
                                        </address>
                                    </endpoint>
                                </send>
                            </then>
                            <else>
                                <sequence key="_sandbox_key_error_"/>
                            </else>
                        </filter>
                    </else>
                </filter>
            </inSequence>
            <outSequence>
                <send/>
            </outSequence>
        </resource>
        <handlers>
            <handler class="org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler"/>
            <handler class="org.wso2.carbon.apimgt.gateway.handlers.throttling.APIThrottleHandler">
                <property name="id" value="A"/>
                <property name="policyKey" value="gov:/apimgt/applicationdata/tiers.xml"/>
            </handler>
            <handler class="org.wso2.carbon.apimgt.usage.publisher.APIMgtUsageHandler"/>
            <handler class="org.wso2.carbon.apimgt.usage.publisher.APIMgtGoogleAnalyticsTrackingHandler"/>
            <handler class="org.wso2.carbon.apimgt.gateway.handlers.ext.APIManagerExtensionHandler"/>
        </handlers>
    </api>

然后将 Access-Control-Allow-Origin 也添加到 Access-Control-Allow-Headers 列表中,并保持其他标头不变。

ex: Access-Control-Allow-Headers: authorization,Access-Control-Allow-Origin,Content-Type

如果仍然出现错误,您能否提供详细的错误消息或示例 PHP 客户端代码?

[1]http://docs.wso2.org/display/AM160/Adding+Documentation+Using+Swagger http://docs.wso2.org/display/AM160/Adding+Documentation+Using+Swagger

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WSO2 API Manager 的跨域问题 的相关文章

随机推荐

  • 如何在 CodeIgniter 中使用准备好的语句

    大家好 我需要在我的网站中使用准备好的语句 我尝试使用这个 sql SELECT FROM tbl user WHERE uid id and activation key key query this gt db gt query sql
  • 实体框架查找与何处

    之间是否存在显着差异 Find id and Where x gt x Id id 这应该迫使我使用 Find over Where First 我会想象 Find 会更有效 但是我应该避免这样做吗 Where First 我问的原因是我在
  • 项目GUID不断变化

    我们有一个 VS2008 解决方案 我注意到发生了一些奇怪的事情 某些项目引用同一解决方案中定义的其他项目 作为项目引用添加 这是前一段时间完成的 直接从 VS 构建效果很好 从 MSBUILD 构建失败 我已删除项目引用并重新添加它 并且
  • npm install 与 sudo npm install -g

    对于某些包我必须运行sudo npm install g而对于其他人npm install就足够了 为什么以及有什么区别 例如 npm install g grunt cli doesn t work sudo npm install g
  • 无法使用 JavaScript 选择最接近的 h2 元素

    我希望能够选择与包含披萨选择选项的字段集最接近的 h2 标题 并使用 jQuery 设置标题的文本 到目前为止我还无法做到这一点 HTML div fieldset fieldset div
  • Breeze 和 Knockout 中的验证

    我最近使用 Knockout 和 ASP NET MVC4 将 Breeze 添加到项目中 我真的很喜欢 Breeze 它节省了大量的编码工作 我使用过 Knockout 验证 喜欢它如何验证数据输入时的属性字段文本框以及错误消息的显示方式
  • Laravel - 捕获 cURL 异常的正确方法

    我正在使用 cURL 构建一个简单的 REST API 包 并希望捕获错误然后返回视图 如果我 dd e 我可以抛出错误 但如果我尝试返回一个视图 它只会继续执行 catch 函数之后的代码 PHP 不应该终止进程并直接进入登录视图吗 tr
  • 在 Rubymine 中运行 Rails 时找不到图像

    当我尝试在 Rubymine 中运行一些 Rails 命令时 出现以下错误 我最近更改了一些权限以使一些符号链接正常工作 尽管这可能不相关 例如当我跑步时rails c我收到此类错误 RAILS GROUPS is unset defaul
  • ruby on Rails + xampp + mysql (Windows 7)

    我正在尝试在 Windows 7 上将 xampp 中包含的 mysql 包与 ruby on Rails 一起使用 但似乎无法让它们一起工作 我有 Rails 3 0 0 和 xampp 1 7 3 Rails 在 xampp 中与 sq
  • 使用Python Mock库来监视内部方法调用

    我正在使用 Python 模拟模块进行测试 我想监视活动对象发出的内部方法调用 我发现 wraps kwarg 可用于设置一个模拟来监视对活动对象的方法调用 使用 Python 模拟来监视对现有对象的调用 https stackoverfl
  • 有谁在 PyCharm 中拥有以下库的“文档 URL”:

    我是 PyCharm 和其他 Jetbrains IDE 的 快速文档 功能的粉丝 但它需要知道每个库的特定 文档 URL 该功能在Preferences gt Tools gt Python External Documentation设
  • 识别 WCF 服务中的客户端

    我有一个工作双工 WCF 服务WSDualHttpBinding 我的问题是找到一种方法来存储具有唯一 ID 的回调通道 该服务旨在长期运行 我可以简单地抓住OperationContext Current GetCallbackChann
  • 如何将参数传递给 HttpInterceptor?

    我正在使用 Angular 4 3 1 和 HttpClient 有一个 HttpInterceptor 来设置一些标头 在某些 http get 请求中 我需要设置不同的标头 无论如何 我可以将一些参数传递给该特定 HttpRequest
  • 如何滚动到页面中间(50%)

    如果不使用流行的scrollTo插件 我如何滚动到页面 div的垂直中间 50 这会将 div 的地狱卷轴滚动到其垂直中间 var myDiv yourdiv var scrollto myDiv offset top myDiv heig
  • 为什么要使用 Handlers 而 runOnUiThread 会做同样的事情?

    我都遇到过Handlers http developer android com reference android os Handler html and 在UiThread上运行 http developer android com r
  • SMT中量化算术推理的局限性是什么?

    我在以下看似微不足道的基准测试中尝试了几种 SMT 求解器 CVC3 CVC4 和 Z3 set logic LIA set info smt lib version 2 0 assert forall x Int forall y Int
  • 如何将反斜杠参数传递给脚本?

    我只想在文本文件中附加用户输入参数 我正在使用以下命令 echo 2 gt gt db txt 2希望用户设置如下路径 D Projects MyProject 它写入文件 但不带反斜杠 结果是 D 项目我的项目 我找不到任何地方可以解决这
  • Android 从后台弹出带有动画的片段

    我有一个在其中加载片段 A 的活动 片段 A 包含 ListView 当单击列表项时 我加载另一个片段 B 代替片段 A 以显示列表视图项详细信息 单击按钮并按下设备后退按钮时 它会加载上一个片段 即显示 ListView 的片段 A 所有
  • 在 jQgrid 中加载本地 JSON 数据,无需 AddJsonRows

    我正在使用 addJsonRows 方法将本地数据添加到 jQgrid 由于此方法禁用排序 我需要另一个解决方案 一个限制 我无法设置 url 并从服务器获取数据 因为数据是通过另一个组件传递的 下面的片段揭示了这个案例 注释行显示了限制
  • WSO2 API Manager 的跨域问题

    我们为客户开发了一些API 并通过API Manager发布了它们 我们为客户提供了一些运行良好的 PHP 代码示例 唯一的问题是他们通过 AJAX 在与 AM 相关的域不同的域中使用这些 API 这是跨域问题吗 我尝试使用以下标头在 AP