вход в keycloak из rest api был заблокирован CORS

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

Пробуем с завитком:

    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.

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

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: поле заголовка запроса access-control-allow-origin не разрешено Access-Control-Allow-Headers в ответе перед проверкой.

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

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

valid redirect url: localhost*
web origins: *

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


person assistbss    schedule 27.03.2020    source источник
comment
Вы когда-нибудь находили решение этой проблемы? У меня такая же проблема   -  person MLyck    schedule 28.01.2021


Ответы (1)


Действительный URL-адрес перенаправления должен иметь перед собой http или https. Таким образом, допустимым для localhost может быть: https: // localhost / * Интернет-источник должен быть чем-то вроде https: // localhost, если вы хотите сделать его безопасным.

person KoenDeRoo    schedule 15.04.2021