jhipster - Keycloak mysql Standalone 使用 JHipster/Angular 生成的应用程序出错
问题描述
我正在使用 JHipster 生成(在线)Angular 和 Spring Boot 项目。当我使用 Keycloak 作为带有 H2 内存数据库的 docker 映像时,我可以让所有东西运行(这是默认的 hello world 示例)。我已经下载并将 Keycloak 设置为连接到 MySQL 的独立应用程序。我相信它工作正常,因为我可以看到我的 Keycloak 数据库正在 MySQL 中更新。
在 Keycloak 中,我添加了一个新领域“Acme”。我创建了一个名为“web_app”的新客户端。我不确定您需要哪些信息来帮助我理解我的错误。我在 Keycloak 中创建了一个用户,myname@acme.com(我为这篇 Stackoverflow 帖子伪装了这个),并使用了一个简单的密码。
当我以电子邮件/密码用户身份登录我的客户端应用程序时,它会将我重定向到 Keycloak,或者当我以 Google/Facebook 用户身份登录时,我会收到如下所示的相同错误。
我在 Keycloak 中找到的带有此错误消息的代码如下:“[not_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(Angular/Spring Boot)能够与 Keycloak 一起作为独立环境使用,因为带有内存 H2 数据库的示例 docker 映像无法满足我在生产中的需求。docker 镜像非常适合作为沙箱或概念证明,但我需要让这个独立的 MySQL 环境正常工作。我可能必须使用 Okta,但它们不支持 Twitter 登录,所以我试图让 Keycloak 工作。
谢谢您的帮助。
解决方案
推荐阅读
- c# - EF Core 5.0 - 更新 ASP.NET Core Web API 中的多对多实体
- java - 如何更新表中的字段并将其插入新表而不更新旧表
- ruby - 试图理解没有前置条件的 else 子句
- oracle - Oracle PLSQL 通过索引进行嵌套表迭代 - 索引可以乱序吗?
- elasticsearch - 使用 Elasticsearch Nest 7.x 查询 5.x 索引
- c# - 根据复选框选择重新加载页面
- java - Protobuf Tcp socket 与 android 通信
- flutter - 使用 Firestore 为 StreamBuilder 创建流
- arrays - 显示用户输入值的 C 代码
- pre-commit.com - pre-commit.com:.pre-commit-config.yaml 和 requirements.txt 中的相同版本