#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.
В любом случае моя работа выполнена.