Я пытаюсь войти, используя 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: *
Я почти уверен, что это проблема, связанная с настройкой сервера. Как я могу решить?