вход в keycloak из остальных API был заблокирован CORS - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь войти, используя keycloak с существующей страницы входа в localhost (localhost: 3000). Keycloak работает на другом хосте (http://kchost: 38080 ). Я знаю, что это не рекомендуемый способ входа в систему, но мне нужно быстро адаптировать существующую систему.

Попытка с помощью curl:

    curl --location --request POST 'http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token' \
        --header 'Content-Type: application/x-www-form-urlencoded' \
        --data-urlencode 'client_id=publictestclient' \
        --data-urlencode 'username=myuser' \
        --data-urlencode 'password=mypass' \
        --data-urlencode 'grant_type=password'

Я успешно получил ожидаемый ответ (с access_token и refresh_token). Я не могу сделать то же самое в браузере. Ошибка связана с CORS.

Я использую топор ios, а вот код:

axios.defaults.httpsAgent = new https.Agent({ rejectUnauthorized: false })
axios.defaults.crossDomain = true;

await axios({
            method: "POST",
            url: 'http://kchost:38080/auth/realms/myrealm/protocol/openid-connect/token',
            headers: {
               "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
               'Access-Control-Allow-Origin': '*'
            },
            data: {
               client_id: 'publictestclient', 
               username: 'myuser', 
               password: 'mypass', 
               grant_type: 'password', 
           }
})

Ошибка: Доступ к XMLHttpRequest в 'http://kchost: 38080 / auth / realms / myrealm / protocol / openid-connect / token 'from origin' http://localhost: 3000 'заблокировано политикой CORS: Доступ к полю заголовка запроса -control-allow-origin не разрешен Access-Control-Allow-Headers в ответе перед полетом.

Если я опускаю заголовок 'Access-Control-Allow-Origin' : '*', ошибка становится: Доступ к XMLHttpRequest в 'http://kchost: 38080 / auth / realms / myrealm / protocol / openid-connect / token ' from origin 'http://localhost: 3000 'заблокировано политикой CORS: на запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

На стороне администратора Keycloak клиент имеет доступ введите publi c, чтобы избежать требования clientSecret. Разрешения прямого доступа включены. Пробовал разные конфигурации для «веб-источников» и «действительных URL-адресов перенаправления», текущая версия:

valid redirect url: localhost*
web origins: *

Я почти уверен, что это проблема, связанная с настройкой сервера. Как я могу решить?

...