Keycloak CORS проблема, связанная с перенаправлением входа в систему - PullRequest
0 голосов
/ 09 октября 2018

Подобные вопросы здесь и здесь не помогли мне решить проблему.

Я использую Keycloak 4.4.0 для защиты моей службы REST, которая реализованаиспользуя Spring Boot, и я использую React для внешнего интерфейса.

Я получаю сообщение об ошибке CORS, когда внешний интерфейс (работает на localhost:3000) делает вызов API на localhost:8080/login и перенаправляется на вход в Keycloakстр.

Ошибка:

localhost /: 1 Не удалось загрузить http://localhost:8080/login: Перенаправление с 'http://localhost:8080/login' на' http://localhost:9080/auth/realms/hbs/protocol/openid-connect/auth?response_type=code&client_id=hbs&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flogin&state=ab5034a9-4baa-4be3-9ec1-feefbe5f9c0b&login=true&scope=openid' заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».Следовательно, Origin 'http://localhost:3000' не разрешен доступ.

Я добавил одно значение '*' в раздел конфигурации Web Origins в клиенте Keycloak.

Я пометил свой REST-контроллер следующим образом:

@RestController
class MyController
{
    @CrossOrigin
    @GetMapping("/login")
    public ResponseEntity<Foo> getFoo(Principal principal)
    {
        return ResponseEntity.ok(new Foo("blah"));
    }
}

Я включил Keycloak и CORS в свойствах приложения:

keycloak.cors = true
keycloak.enabled = true

Если я отключу Keycloak и CORS, проблема исчезнет.

Как описано здесь , я подозреваю, что проблема связана с тем, что сервер Keycloak не отвечает ни на какие заголовки Access-Control-Allow-Origin, несмотря на то, что Web Origins правильно настроен на портале администрирования Keycloak.Но я не совсем уверен, как это подтвердить.

1 Ответ

0 голосов
/ 29 ноября 2018

Представьте, что ниже приведен json-код вашей конфигурации Keycloak:

{
  "realm" : "cors",
  "resource" : "cors-database-service",
  "auth-server-url": "http://localhost-auth:8080/auth",
  "bearer-only" : true,
  "ssl-required": "external",
  "enable-cors": true
}

Попробуйте добавить последнюю строку в файл конфигурации.Дайте мне знать, если это сработало для вас!

OBS: я столкнулся с той же проблемой, но использую адаптеры Wildfly / JBOSS и настраиваю эту конфигурацию на сервере приложений.

@РЕДАКТИРОВАТЬ: Это работало нормально для меня.

Попробуйте изменить "Тип доступа" на bearer-only внутри вашего клиента REST на Keycloak.

Кроме того, не забудьте добавить параметр {"{"Authorization": "bearer" + $ TOKEN} при отправке HTTP-запросов от вашего клиента в ваш RESTful API.

...