Как настроить CORS в APIMan

Я новичок в apiman, и я пытаюсь использовать некоторые вызовы API с Jquery. Но, к сожалению, я получил эту ошибку:

XMLHttpRequest не может загрузить https://apigtw.url/apiman-gateway/ //1.0/?apikey=9999999-8888-6666-33333-968a712ce68b. В запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-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?

Я считаю, что я должен добавить COR, но я не знаю, если это необходимо. Я пытался использовать это, но ошибка все еще происходит.

Пожалуйста, нужна помощь

Кто-нибудь знает, как настроить APIMan COR?

Редактировать:

Кажется, это было решено в проблеме 516, но все еще происходит со мной. Я использую версию 1.2.3 APIMan

Вот заголовки ответа:

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);
  }
});

1 ответ

Вы гарантировали, что политика CORS находится перед политикой Keycloak в цепочке политик? Это обеспечит первичное обслуживание CORS.

т.е. CORS Policy -> Keycloak Policy -> Authorization Policy

NB. Если вы используете политику CORS, то вам, вероятно, следует передать свой ключ API в качестве параметра запроса, поскольку браузеры не передают пользовательские заголовки во время предварительного запроса (который он выполняет от вашего имени).

Смотрите: /questions/38587856/kak-otpravit-sobstvennyij-zagolovok-v-mezhdomennom-cors-xmlhttprequest/38587870#38587870

Другие вопросы по тегам