我正在尝试使用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
的说明进行操作这是keycloak.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);