使用Keycloak的Spring Boot应用程序的Oauth2登录失败

时间:2018-12-24 14:21:40

标签: spring-boot jhipster keycloak

我有一个简单的Spring引导应用程序(使用jhipster 5.7.2生成)。没有服务发现。只是一个简单的整体。它使用Keycloak进行身份验证。

这是我为我的应用选择的配置:

{
  "generator-jhipster": {
    "promptValues": {
      "packageName": "com.mycompany.myapp",
      "nativeLanguage": "en"
    },
    "jhipsterVersion": "5.7.2",
    "applicationType": "monolith",
    "baseName": "test",
    "packageName": "com.mycompany.myapp",
    "packageFolder": "com/mycompany/myapp",
    "serverPort": "8080",
    "authenticationType": "oauth2",
    "cacheProvider": "no",
    "websocket": false,
    "databaseType": "sql",
    "devDatabaseType": "postgresql",
    "prodDatabaseType": "postgresql",
    "searchEngine": false,
    "messageBroker": false,
    "serviceDiscoveryType": false,
    "buildTool": "maven",
    "enableSwaggerCodegen": false,
    "clientFramework": "angularX",
    "useSass": false,
    "clientPackageManager": "npm",
    "testFrameworks": [],
    "jhiPrefix": "jhi",
    "otherModules": [],
    "enableTranslation": true,
    "nativeLanguage": "en",
    "languages": [
      "en"
    ]
  }
}

我正在使用Keycloak 4.5

我已遵循this文档,以在我的Auth Server上启用HTTPS。 现在,我的身份验证服务器可从外部访问。

我的应用程序正在localhost中运行。当我尝试执行登录时,登录失败并显示以下消息:未经授权

enter image description here

应用程序日志中显示以下内容:(BadCredentialsException)

2018-12-24 19:31:27.579 DEBUG 43877 --- [ XNIO-2 task-13] c.m.myapp.aop.logging.LoggingAspect      : Enter: com.mycompany.myapp.repository.CustomAuditEventRepository.add() with argument[s] = [AuditEvent [timestamp=2018-12-24T14:01:27.579Z, principal=UNKNOWN, type=AUTHENTICATION_FAILURE, data={type=org.springframework.security.authentication.BadCredentialsException, message=Could not obtain access token}]]
Hibernate: select nextval ('hibernate_sequence')

Keycloak端无日志。如果我删除了我的身份验证服务器上与HTTPS相关的配置,则登录有效。不知道到底是什么问题。

1 个答案:

答案 0 :(得分:1)

我找出了此问题的原因。

就我而言,问题出在密钥库(JKS)创建过程中。 我们只给了cert.crt和privkey.crt。 创建密钥库时不包括根证书。 docs明确要求包含根证书。

可以从证书提供者那里下载根证书。 This链接有助于包含根证书。

使用Letsencrypt颁发的证书时,我们需要做的只是使用privkey.pem和fullchain.pem。在这里,我们不必担心将根证书包含在fullchain中。pem已经包含了它。

BaseTest.driver.SwitchTo().Window(BaseTest.driver.WindowHandles[i]);