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.

Другие вопросы по тегам