Я пытаюсь использовать Keycloak для защиты моего настольного приложения. Для начала я все еще пытаюсь использовать пример, как в документации, которую можно найти здесь https://www.keycloak.org/docs/4.8/securing_apps/index.html#_installed_adapter. Я могу войти в систему просто отлично, получить токены и все пользовательские данные, но по какой-то причине всякий раз, когда я вызываю метод keycloak .logout () просто перенаправляет меня на страницу «успешный вход» и отказывается выходить из системы.
Я что-то упускаю из виду?
Я уже пытался перенаправить пользователя на страницу выхода по адресу http://localhost:8080/auth/realms/{My-Realm}/protocol/openid-connect/logout
но это не похоже на что-либо делать.
Единственный обходной путь, который я нашел, - это изменить redirect_uri на / auth / realms / {My-Realm} / account / * и оттуда просто нажать на выход
Для конфигурации клиента я следовал инструкциям, найденным здесь https://github.com/keycloak/keycloak-documentation/blob/master/securing_apps/topics/oidc/java/installed-adapter.adoc
Вот ключик.json
{
"realm": "{My-Realm",
"auth-server-url": "http://localhost:8080/auth/",
"resource": "login",
"public-client": true,
"use-resource-role-mappings": true
}
А вот и тестовый класс
KeycloakInstalled keycloak = new KeycloakInstalled();
keycloak.setLocale(Locale.ENGLISH);
keycloak.login();
AccessToken token = keycloak.getToken();
System.out.println("Logged in...");
System.out.println("Token: " + token.getSubject());
System.out.println("Username: " + token.getPreferredUsername());
String username = token.getPreferredUsername();
String userToken = token.getSubject();
Access realmAccess = token.getRealmAccess();
User user = new User();
HashSet < String > roles = (HashSet < String > ) realmAccess.getRoles();
System.out.println("Role: " + roles);
user.setUsername(username);
user.setRole(roles);
user.setToken(userToken);
user.setKeycloak(keycloak);
try {
System.out.println("AccessToken: " + keycloak.getTokenString());
user.setAccessToken(keycloak.getTokenString());
} catch(Exception ex) {
ex.printStackTrace();
}
int timeoutSeconds = 3;
System.out.printf("Logging out in...%d Seconds%n", timeoutSeconds);
try {
TimeUnit.SECONDS.sleep(timeoutSeconds);
} catch(Exception e) {
e.printStackTrace();
}
try {
keycloak.logout();
} catch(Exception e) {
e.printStackTrace();
}
System.out.println("Exiting...");
System.exit(0);