我正在使用keycloak(4.3.0)openid-connect流。对于我的客户端应用,我正在使用:
public class AuthenticationTest {
public static void main(String[] args) {
final String KEYCLOAK_JSON = Constants.KC_CONFIG_JSON_PATH;
InputStream config = Thread.currentThread().getContextClassLoader().getResourceAsStream(KEYCLOAK_JSON);
KeycloakInstalled keycloak;
try {
keycloak = new KeycloakInstalled(config);
config.close();
keycloak.loginDesktop();
AccessToken token = keycloak.getToken();
System.out.printf("UserId: %s%n", token.getSubject());
System.out.printf("Username: %s%n", token.getPreferredUsername());
System.out.printf("Email: %s%n", token.getEmail());
System.out.println(keycloak.getTokenString());
System.in.read();
} catch (IOException | VerificationException | OAuthErrorException | URISyntaxException | HttpFailure
| InterruptedException e) {
e.printStackTrace();
}
}
}
我已经提到了此处提到的示例:https://gist.github.com/thomasdarimont/ca16080145d226e50628d5696ffb9508
第一次启动应用程序并登录时,我得到
“登录成功。您可以关闭此浏览器窗口,然后返回到 您的控制台应用程序。”
但是,如果我启动了应用程序的第二个实例/即使没有关闭前一个浏览器窗口也重新启动了应用程序,仍然会显示登录页面,而不是您已经登录消息。
(新的登录页面显示在与第一个登录页面相同的窗口中的新选项卡中,因此这不是无法在不同窗口之间保持状态的问题。我也尝试了20秒重新启动该应用程序,因此似乎也不是超时的问题)
浏览器:Firefox,chrome。
任何想法我在做什么错。期望浏览器必须为同一用户维护一个密钥隐藏会话,直到关闭至少几分钟。
注意:我在Keycloak 3.4.3中没有遇到这个问题。但是它开始出现在4.1.0和4.3.0
我看到3.4.3和4.x上的cookie有所不同:
3.4.3 :(与第一次登录或后续登录相同)