Интерфейсные и серверные клиенты Keycloak

#keycloak #keycloak-rest-api

#поиск ключей #keycloak-rest-api

Вопрос:

Это связано с клиентами keycloak. Мой интерфейс подключен к общедоступному клиенту, а серверная часть подключена к конфиденциальному клиенту. Я могу войти в систему, получить код, поскольку я использую response_type =code, включив «Стандартный поток включен». Этот код перенаправляет и возвращает мне Idtoken, refreshtoken и токен. Теперь мне нужно связаться с серверной частью, которая является конфиденциальной, я хотел бы аутентифицировать пользователя, используя некоторые значения, которые я получил от клиентского интерфейса.

Как я могу это сделать?

Вот мой интерфейс и серверная часть conf

Интерфейс

 {
   "realm": "xyz",
   "auth-server-url": "http://localhost:8333/auth/",
   "ssl-required": "external",
   "resource": "frontend-app",
   "public-client": true,
   "confidential-port": 0,
   "enable-cors": true
}
  

СЕРВЕРНАЯ часть

 keycloak.auth-server-url=http://localhost:8333/auth
keycloak.realm=xyz
keycloak.resource=backend-app
keycloak.principal-attribute=preferred_username
keycloak.bearer-only=true
keycloak.credentials.secret=xxx-xxx-xxx
  

это из настройки области

Ответ №1:

Это может кому-то помочь. Моя серверная служба, которая является проектом springboot с Spring security keycloakAuthenticationProvider, проверяет подлинность токена, полученного от общедоступного клиента внешнего интерфейса.

Вызов из внешнего интерфейса

  axios({
                    method: 'GET',
                    url: '/api/authenticate',
                    headers:{'Authorization': 'Bearer ' keycloak.token ''}

                }).then((r) => {
                    console.log("response",r)
                })
  

Вызов серверной части

 @GetMapping("/api/authenticate")
    public ResponseEntity<SecureUserDto> authenticate() {
        String username = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString();
        User user = userRepository.findWithPrivilegesByUsername(username);

        return ResponseEntity.ok();
    }
  

Но я все еще не смог правильно настроить postman в конечной точке .. / token, предоставляемой сервером keycloak.
В любом случае моя работа выполнена.