java.lang.RuntimeException: необходимо установить "область" в конфигурации
Я создал микросервис Spring и пытаюсь проверить токен jwt, созданный с помощью keycloak.
Мой файл application.yaml содержит следующее свойство keycloak:
keycloak:
enabled: true
auth-server-url: http://localhost:8080/auth}
realm: another_realm
realm-key: another_key
resource: ping-pong
credentials.secret: another_secret
principal-attribute: blue
public-client: false
ssl-required: external
cors: true
autodetect-bearer-only: true
use-resource-role-mappings: false
expose-token: true
security-constraints:
- authRoles: [ 'ping_pong_user' ]
securityCollections:
- name: api
patterns: [ '/api/*' ]
Мой файл pom содержит зависимость keycloak:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
<version>11.0.3</version>
</dependency>
Когда я пытаюсь вызвать свои ресурсы api, приложение возвращает ошибку:
2020-11-30 10:07:03.101 ERROR 12336 --- [.0-18090-exec-1] o.a.c.c.C.[Tomcat].[localhost] : Exception Processing /api/save
java.lang.RuntimeException: Must set 'realm' in config
at org.keycloak.adapters.KeycloakDeploymentBuilder.internalBuild(KeycloakDeploymentBuilder.java:57) ~[keycloak-adapter-core-11.0.3.jar:11.0.3]
at org.keycloak.adapters.KeycloakDeploymentBuilder.build(KeycloakDeploymentBuilder.java:202) ~[keycloak-adapter-core-11.0.3.jar:11.0.3]
at org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver.resolve(KeycloakSpringBootConfigResolver.java:41) ~[keycloak-spring-boot-adapter-core-11.0.3.jar:11.0.3]
at org.keycloak.adapters.springsecurity.config.KeycloakSpringConfigResolverWrapper.resolve(KeycloakSpringConfigResolverWrapper.java:40) ~[keycloak-spring-security-adapter-11.0.3.jar:11.0.3]
at org.keycloak.adapters.AdapterDeploymentContext.resolveDeployment(AdapterDeploymentContext.java:89) ~[keycloak-adapter-core-11.0.3.jar:11.0.3]
at org.keycloak.adapters.PreAuthActionsHandler.preflightCors(PreAuthActionsHandler.java:100) ~[keycloak-adapter-core-11.0.3.jar:11.0.3]
at org.keycloak.adapters.PreAuthActionsHandler.handleRequest(PreAuthActionsHandler.java:75) ~[keycloak-adapter-core-11.0.3.jar:11.0.3]
at org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.invoke(AbstractKeycloakAuthenticatorValve.java:177) ~[spring-boot-container-bundle-11.0.3.jar:11.0.3]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) [tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) [tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.39.jar:9.0.39]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_241]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_241]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.39.jar:9.0.39]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_241]
Какие-нибудь подсказки?
2 ответа
Вы можете попробовать добавить
@Bean
public KeycloakConfigResolver KeycloakConfigResolver(){
return new KeycloakSpringBootConfigResolver();
}
в свой класс конфигурации безопасности, поэтому вы сообщаете SpringSecurity, что он должен использовать преобразователь SpringBoot Config (источник).
Вы можете поделиться своим файлом конфигурации? Надеюсь, вы использовали пружинный переходник для ключей. Вы также можете проверить, создана ли область в вашем интерфейсе Keycloak.