Keycloak mysql独立版本在JHipster / Angular生成的应用中出现错误

时间:2019-08-27 03:34:23

标签: jhipster openid keycloak

我正在使用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用户身份登录时,都会出现以下相同的错误。

Login Error

我在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设置。让我知道还有什么可分享的内容,以帮助您调试。

Keycloak -> Clients -> Web_app client settings

我希望此JHipster(角度/春季启动)与Keycloak一起作为独立环境使用,因为带有内存中H2数据库的示例Docker映像将无法满足我的生产需求。 docker映像非常适合作为沙箱或概念证明,但我需要使此独立的MySQL环境正常工作。我可能必须使用Okta,但它们不支持Twitter登录,所以我试图让Keycloak正常工作。

感谢您的帮助。

0 个答案:

没有答案