我正在使用JHipster生成(在线)Angular和Spring Boot项目。当我将Keycloak用作带有H2内存数据库的Docker映像时,我可以运行所有东西(这是默认的hello world示例)。我已经下载并设置了Keycloak作为连接到MySQL的独立应用程序。我相信它能正常工作,因为我可以在MySQL中看到我的Keycloak数据库正在更新。
在Keycloak中,我添加了一个新领域“ Acme”。我创建了一个名为“ web_app”的新客户端。我不确定您需要什么信息来帮助我理解我的错误。我已经在Keycloak的myname@acme.com(我为这个Stackoverflow帖子伪装了这个)中创建了一个简单的密码。
当我以电子邮件/密码用户身份登录到客户端应用程序(该应用程序将我重定向到Keycloak)时,或者以Google / Facebook用户身份登录时,都会出现以下相同的错误。
我在Keycloak中发现此错误消息的代码如下,“ [no_allowed]用户或客户端不允许使用脱机令牌。”
public AccessTokenResponseBuilder generateRefreshToken() {
if (accessToken == null) {
throw new IllegalStateException("accessToken not set");
}
ClientScopeModel offlineAccessScope = KeycloakModelUtils.getClientScopeByName(realm, OAuth2Constants.OFFLINE_ACCESS);
boolean offlineTokenRequested = offlineAccessScope==null ? false : clientSessionCtx.getClientScopeIds().contains(offlineAccessScope.getId());
if (offlineTokenRequested) {
UserSessionManager sessionManager = new UserSessionManager(session);
if (!sessionManager.isOfflineTokenAllowed(clientSessionCtx)) {
event.error(Errors.NOT_ALLOWED);
throw new ErrorResponseException("not_allowed", "Offline tokens not allowed for the user or client", Response.Status.BAD_REQUEST);
}
refreshToken = new RefreshToken(accessToken);
refreshToken.type(TokenUtil.TOKEN_TYPE_OFFLINE);
sessionManager.createOrUpdateOfflineSession(clientSessionCtx.getClientSession(), userSession);
} else {
refreshToken = new RefreshToken(accessToken);
refreshToken.expiration(getRefreshExpiration());
}
refreshToken.id(KeycloakModelUtils.generateId());
refreshToken.issuedNow();
return this;
}
当我以电子邮件/密码登录时,通过Keycloak日志收到此错误。
21:11:55,478 WARN [org.keycloak.events] (default task-1) type=CODE_TO_TOKEN_ERROR, realmId=acme, clientId=web_app, userId=7e361802-83ac-4441-8e8e-a2c431b3d542, ipAddress=127.0.0.1, error=not_allowed, grant_type=authorization_code, code_id=930ce6f2-4324-40d6-9ba1-de36a93d30c4, client_auth_method=client-secret
以Google提供者身份登录时,我通过Keycloak日志收到此错误。
21:20:20,574 WARN [org.keycloak.connections.httpclient.DefaultHttpClientFactory] (default task-4) Truststore is disabled
21:20:44,307 WARN [org.keycloak.events] (default task-4) type=CODE_TO_TOKEN_ERROR, realmId=acme, clientId=web_app, userId=9dd5c436-299a-409c-9232-442218f9f41b, ipAddress=127.0.0.1, error=not_allowed, grant_type=authorization_code, code_id=6847b494-86b6-4046-a81f-bb40c911e1e9, client_auth_method=client-secret
下面是我正在使用的URL和端口。
Angular Client: http://localhost:9000
Spring Boot Server: http://localhost:8081
Keycloak: http://localhost:8080
以下是我的Keycloak,客户端,web_app设置。让我知道还有什么可分享的内容,以帮助您调试。
我希望此JHipster(角度/春季启动)与Keycloak一起作为独立环境使用,因为带有内存中H2数据库的示例Docker映像将无法满足我的生产需求。 docker映像非常适合作为沙箱或概念证明,但我需要使此独立的MySQL环境正常工作。我可能必须使用Okta,但它们不支持Twitter登录,所以我试图让Keycloak正常工作。
感谢您的帮助。