【问题标题】:How to configure CORS in APIMan如何在 APIMan 中配置 CORS
【发布时间】:2017-05-12 04:22:23
【问题描述】:

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

XMLHttpRequest 无法加载 https://apigtw.url/apiman-gateway///1.0/?apikey=9999999-8888-6666-33333-968a712ce68b。 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此,Origin 'http://myapp.local' 不允许访问。 响应的 HTTP 状态代码为 500。

所以,我正在使用一些策略,例如:

Keycloak 授权政策:

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 配置的内容吗?

我觉得应该加CORs,但是不知道有没有必要。我尝试使用它,但仍然出现错误。

请帮忙

有人知道如何配置 APIMan CORs 吗?

编辑:

这似乎已在issue 516 中解决,但我仍然会发生。我正在使用 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);
  }
});

【问题讨论】:

标签: jquery ajax cors keycloak apiman


【解决方案1】:

您是否确保 CORS 策略在策略链中 Keycloak 策略之前?这将确保首先为 CORS 提供服务。

即CORS 策略 -> Keycloak 策略 -> 授权策略

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

见:https://stackoverflow.com/a/13997235/2766538

【讨论】:

  • 谢谢@Marc!这是我得到的唯一政策。顺便说一句,我不知道这是否有用,但我将此策略放在我的客户端和 API 之间的计划中。
  • 现在,我只是删除了 keycloak 和授权策略。现在我试图理解为什么请求没有考虑我的请求标头
  • 根据您提供的编辑 - 错误表明您没有使用正确的 URL 来访问 API。您应该使用客户端选项卡中提供的 URL - 您似乎正在尝试直接访问它。
  • 我修好了!这是因为我在第一次尝试时发送了 apikey 作为查询参数。很抱歉
  • 我在浏览器上使用了相同的网址并且工作正常。我刚刚删除了 keycloak 政策一段时间
猜你喜欢
  • 2022-01-12
  • 2021-10-28
  • 2018-05-01
  • 2021-03-28
  • 1970-01-01
  • 2021-03-24
  • 2020-01-21
  • 1970-01-01
  • 2015-04-20
相关资源
最近更新 更多