Jquery 如何在APIMan中配置CORS

Jquery 如何在APIMan中配置CORS,jquery,ajax,cors,keycloak,apiman,Jquery,Ajax,Cors,Keycloak,Apiman,我是apiman的新手,我正在尝试在Jquery中使用一些API调用。但不幸的是,我犯了这个错误: 无法加载XMLHttpRequest //1.0/?apikey=9999999-8888-6666-33333-968a712ce68b。 请求的服务器上不存在“Access Control Allow Origin”标头 资源。因此,不允许访问源“”。 响应的HTTP状态代码为500 因此,我使用了一些策略,例如: 密钥斗篷授权策略: Require OAuth: true Require T

我是apiman的新手,我正在尝试在Jquery中使用一些API调用。但不幸的是,我犯了这个错误:

无法加载XMLHttpRequest //1.0/?apikey=9999999-8888-6666-33333-968a712ce68b。 请求的服务器上不存在“Access Control Allow Origin”标头 资源。因此,不允许访问源“”。 响应的HTTP状态代码为500

因此,我使用了一些策略,例如:

密钥斗篷授权策略:

Require OAuth: true
Require Transport Security: true
Blacklist Unsafe Tokens: false
Realm: https://sso.local/auth/realms/test-realm
Keycloak Realm Certificate: <keycloak key certificate>
Forward Realm Roles? true
Path: .*
Verb: *
Required Role: my-role
我是否错过了apiman配置的某些内容

我想我应该补充一下,但我不知道是否有必要。我尝试使用此选项,但仍然出现错误

求求你,需要帮助吗

有人知道如何配置APIMan CORs吗

编辑:

Require OAuth: true
Require Transport Security: true
Blacklist Unsafe Tokens: false
Realm: https://sso.local/auth/realms/test-realm
Keycloak Realm Certificate: <keycloak key certificate>
Forward Realm Roles? true
Path: .*
Verb: *
Required Role: my-role
这似乎是解决了,但仍然发生在我身上。我正在使用APIMan的1.2.3版

以下是响应标题:

Connection:close
Content-Type:application/json
Date:Wed, 28 Dec 2016 13:54:08 GMT
Server:Apache/2.4.18 (Ubuntu)
Transfer-Encoding:chunked
X-Gateway-Error:API not public.
X-Powered-By:Undertow/1

以下是请求标头:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:authorization, x-api-key
Access-Control-Request-Method:GET
Connection:keep-alive
Host: apiman.url
Origin:http://192.168.56.22:8080
Referer:http://192.168.56.22:8080/app
User-Agent:Mozilla/5.0 ...
Query String Parameters
view source
view URL encoded
下面是我的ajax请求:

$.ajax({
  url: 'https://apiman.url/apiman-gateway/<org>/<api>/1.0/<method>?apikey=xxxxxx-xxxxx-xxxxx-xxxxx',
  headers: {
      'Content-Type':'application/json',
      'Accept' : 'application/json',
      'Authorization' : 'Bearer ' + keycloak.token
  },
  method: 'GET',
  dataType: 'json',
  success: function(data){
    console.log('header1', data);
  }
});
$.ajax({
网址:'https://apiman.url/apiman-gateway///1.0/?apikey=xxxxxx-xxxxx-xxxxx-xxxxx',
标题:{
“内容类型”:“应用程序/json”,
“接受”:“应用程序/json”,
“授权”:“持有人”+keydepeat.token
},
方法:“GET”,
数据类型:“json”,
成功:功能(数据){
console.log('header1',数据);
}
});

您是否确保CORS策略在策略链中先于KeyClope策略?这将确保首先维修CORS

i、 e.CORS策略->密钥斗篷策略->授权策略

注意:如果您使用的是CORS策略,那么您可能应该将API密钥作为查询参数传递,因为浏览器在飞行前请求(它代表您执行)期间不会传递自定义头


请参阅:

您是否已确保CORS策略在策略链中的KeyClope策略之前?这将确保首先维修CORS

i、 e.CORS策略->密钥斗篷策略->授权策略

注意:如果您使用的是CORS策略,那么您可能应该将API密钥作为查询参数传递,因为浏览器在飞行前请求(它代表您执行)期间不会传递自定义头


请参阅:

可能重复的感谢!那个链接有相似的内容,可以帮助我。但是我相信我可以通过这个链接添加更多的信息。也许这个问题太笼统了。我将更改此可能的副本谢谢!那个链接有相似的内容,可以帮助我。但是我相信我可以通过这个链接添加更多的信息。也许这个问题太笼统了。我来换这个谢谢@Marc!这是我唯一的政策。顺便说一句,我不知道这是否有用,但我把这个策略放在我的客户机和API之间的计划中。现在,我只是删除了keydape和授权策略。现在,我试图从您提供的编辑中理解为什么请求没有考虑我的请求标题-错误表明您没有使用正确的URL访问API。您应该使用客户端选项卡提供的URL-您似乎试图直接访问它。我修复了它!这是因为我在第一次尝试中发送了apikey作为查询参数。为此,我在浏览器上使用了相同的url,效果很好。我刚刚删除了whileThanks@Marc的keybeave政策!这是我唯一的政策。顺便说一句,我不知道这是否有用,但我把这个策略放在我的客户机和API之间的计划中。现在,我只是删除了keydape和授权策略。现在,我试图从您提供的编辑中理解为什么请求没有考虑我的请求标题-错误表明您没有使用正确的URL访问API。您应该使用客户端选项卡提供的URL-您似乎试图直接访问它。我修复了它!这是因为我在第一次尝试中发送了apikey作为查询参数。为此,我在浏览器上使用了相同的url,效果很好。我刚刚删除了keybeave策略一段时间