ApiCurio (http, porta 8080) está sendo executado por trás do Nginx (http, porta 80). O F5 (https) encaminha a solicitação ao Nginx. Consigo vincular https://github.com , mas erro " Publicar API ".
Versão KeyCloak: 3.4.3.Final.
Observe, estou recebendo o mesmo erro mesmo se eu remover F5 e Nginx da imagem e lidar diretamente com o ApiCurio.
_Mensagem de erro: -_
Detalhes de alternância : -
io.apicurio.hub.core.exceptions.ServerError: Erro inesperado do servidor
em io.apicurio.hub.api.rest.impl.AccountsResource.getOrganizations (AccountsResource.java:241)
em io.apicurio.hub.api.rest.impl.AccountsResource $ Proxy $ _ $$ _ WeldClientProxy.getOrganizations (fonte desconhecida)
em sun.reflect.NativeMethodAccessorImpl.invoke0 (método nativo)
em sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
em sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
em java.lang.reflect.Method.invoke (Method.java:497)
em org.jboss.resteasy.core.MethodInjectorImpl.invoke (MethodInjectorImpl.java:140)
em org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget (ResourceMethodInvoker.java:509)
em org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter (ResourceMethodInvoker.java:399)
em org.jboss.resteasy.core.ResourceMethodInvoker.lambda $ invokeOnTarget $ 0 (ResourceMethodInvoker.java:363)
em org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter (PreMatchContainerRequestContext.java:358)
em org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget (ResourceMethodInvoker.java:365)
em org.jboss.resteasy.core.ResourceMethodInvoker.invoke (ResourceMethodInvoker.java:337)
em org.jboss.resteasy.core.ResourceMethodInvoker.invoke (ResourceMethodInvoker.java:310)
em org.jboss.resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher.java:443)
em org.jboss.resteasy.core.SynchronousDispatcher.lambda $ invoke $ 4 (SynchronousDispatcher.java:233)
em org.jboss.resteasy.core.SynchronousDispatcher.lambda $ preprocess $ 0 (SynchronousDispatcher.java:139)
em org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter (PreMatchContainerRequestContext.java:358)
em org.jboss.resteasy.core.SynchronousDispatcher.preprocess (SynchronousDispatcher.java:142)
em org.jboss.resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher.java:219)
em org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service (ServletContainerDispatcher.java:227)
em org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:56)
em org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:51)
em javax.servlet.http.HttpServlet.service (HttpServlet.java:791)
em io.undertow.servlet.handlers.ServletHandler.handleRequest (ServletHandler.java:74)
em io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:129)
em io.apicurio.hub.api.security.KeycloakAuthenticationFilter.doFilter (KeycloakAuthenticationFilter.java:72)
em io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)
em io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)
em io.apicurio.hub.api.filters.DisableCachingFilter.doFilter (DisableCachingFilter.java:66)
em io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)
em io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)
em io.apicurio.hub.api.filters.CorsFilter.doFilter (CorsFilter.java:64)
em io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)
em io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)
em io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter (SpanFinishingFilter.java:55)
em io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)
em io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)
em io.undertow.servlet.handlers.FilterHandler.handleRequest (FilterHandler.java:84)
em io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest (ServletSecurityRoleHandler.java:62)
em io.undertow.servlet.handlers.ServletChain $ 1.handleRequest (ServletChain.java:68)
em io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest (ServletDispatchingHandler.java:36)
em org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest (SecurityContextAssociationHandler.java:78)
em io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
em org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest (UndertowAuthenticatedActionsHandler.java:66)
em io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest (SSLInformationAssociationHandler.java:132)
em io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest (ServletAuthenticationCallHandler.java:57)
em io.undertow.server.handlers.DisableCacheHandler.handleRequest (DisableCacheHandler.java:33)
em io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
em io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest (AuthenticationConstraintHandler.java:53)
em io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest (AbstractConfidentialityHandler.java:46)
em io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest (ServletConfidentialityConstraintHandler.java:64)
em io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest (ServletSecurityConstraintHandler.java:59)
em io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest (AuthenticationMechanismsHandler.java:60)
em io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest (CachedAuthenticatedSessionHandler.java:77)
em io.undertow.security.handlers.NotificationReceiverHandler.handleRequest (NotificationReceiverHandler.java:50)
em io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest (AbstractSecurityContextAssociationHandler.java:43)
em io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
em org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest (JACCContextIdHandler.java:61)
em io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
em org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest (GlobalRequestControllerHandler.java:68)
em org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest (ServletPreAuthActionsHandler.java:69)
em io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
em io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest (ServletInitialHandler.java:292)
em io.undertow.servlet.handlers.ServletInitialHandler.access $ 100 (ServletInitialHandler.java:81)
em io.undertow.servlet.handlers.ServletInitialHandler $ 2.call (ServletInitialHandler.java:138)
em io.undertow.servlet.handlers.ServletInitialHandler $ 2.call (ServletInitialHandler.java:135)
em io.undertow.servlet.core.ServletRequestContextThreadSetupAction $ 1.call (ServletRequestContextThreadSetupAction.java:48)
em io.undertow.servlet.core.ContextClassLoaderSetupAction $ 1.call (ContextClassLoaderSetupAction.java:43)
em org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda $ create $ 0 (SecurityContextThreadSetupAction.java:105)
em org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
em org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
em org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
em org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
em io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest (ServletInitialHandler.java:272)
em io.undertow.servlet.handlers.ServletInitialHandler.access $ 000 (ServletInitialHandler.java:81)
em io.undertow.servlet.handlers.ServletInitialHandler $ 1.handleRequest (ServletInitialHandler.java:104)
em io.undertow.server.Connectors.executeRootHandler (Connectors.java:360)
em io.undertow.server.HttpServerExchange $ 1.run (HttpServerExchange.java:830)
em org.jboss.threads.ContextClassLoaderSavingRunnable.run (ContextClassLoaderSavingRunnable.java:35)
em org.jboss.threads.EnhancedQueueExecutor.safeRun (EnhancedQueueExecutor.java:1985)
em org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.doRunTask (EnhancedQueueExecutor.java:1487)
em org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.run (EnhancedQueueExecutor.java:1378)
em java.lang.Thread.run (Thread.java:745)
Causado por: io.apicurio.hub.api.connectors.SourceConnectorException: java.io.IOException: Resposta inesperada de Keycloak: 403 :: Forbidden
em io.apicurio.hub.api.connectors.AbstractSourceConnector.getExternalToken (AbstractSourceConnector.java:102)
em io.apicurio.hub.api.github.GitHubSourceConnector.githubClient (GitHubSourceConnector.java:88)
em io.apicurio.hub.api.github.GitHubSourceConnector.getOrganizations (GitHubSourceConnector.java:313)
em io.apicurio.hub.api.github.GitHubSourceConnector $ Proxy $ _ $$ _ WeldClientProxy.getOrganizations (fonte desconhecida)
em io.apicurio.hub.api.rest.impl.AccountsResource.getOrganizations (AccountsResource.java:239)
... 83 mais
Causado por: java.io.IOException: Resposta inesperada de Keycloak: 403 :: Forbidden
em io.apicurio.hub.api.security.KeycloakLinkedAccountsProvider.getLinkedAccountToken (KeycloakLinkedAccountsProvider.java:187)
em io.apicurio.hub.api.security.KeycloakLinkedAccountsProvider $ Proxy $ _ $$ _ WeldClientProxy.getLinkedAccountToken (fonte desconhecida)
em io.apicurio.hub.api.connectors.AbstractSourceConnector.getExternalToken (AbstractSourceConnector.java:94)
... 87 mais
O log do navegador
Entre em contato se precisar de mais informações.
Hm. Este erro ocorre quando Apicurio tenta invocar uma API REST Keycloak para recuperar o token de acesso GitHub que o Keycloak está gerenciando. Este token é necessário para que Apicurio possa fazer chamadas autenticadas ao GitHub em nome do usuário autenticado.
Não sei imediatamente porque o Keycloak está respondendo com um 403. Há algum rastreamento de pilha no log do servidor do Keycloak?
_Aplicação GitHub OAuth : -_
_Configuração do GitHub no
_Link da minha conta GitHub
_Publicando minha API no GitHub vinculado
_KeyCloak log: -_
25/06/2019 10: 17: 58,183 WARN [org.keycloak.events] (tarefa-24 padrão) type = IDENTITY_PROVIDER_RETRIEVE_TOKEN_ERROR, realmId = interno, clientId = null, userId = null, ipAddress = 10.aaa.bbb.ccc, erro = Cliente [apicurio-studio] não autorizado a recuperar tokens do provedor de identidade [github].
25/06/2019 10: 17: 58.184 ERRO [org.keycloak.services.resources.IdentityBrokerService] (tarefa-24 padrão) Cliente [apicurio-studio] não autorizado a recuperar tokens do provedor de identidade [github].
Isso provavelmente ocorre porque o cliente apicurio-studio (no Keycloak) não tem uma função necessária. Não tenho acesso aos detalhes agora (estou viajando), mas de memória há uma função broker
de algum tipo que é necessária. Oh, espere - posso obter a configuração de um KC local que instalei. Aqui está:
Verifique essa configuração em seu reino KC.
@EricWittmann muito obrigado por responder minha consulta. Depois de adicionar a função de corretor em meu perfil de usuário, posso publicar APIs. Funciona bem com GitHub e GitLab.
Para aquelas pobres almas que acabaram aqui por causa do erro no registro do keycloak: Cliente [apicurio-studio] não autorizado a recuperar tokens do provedor de identidade [github].
A função do token de leitura pode estar faltando em dois pontos:
Comentários muito úteis
Para aquelas pobres almas que acabaram aqui por causa do erro no registro do keycloak: Cliente [apicurio-studio] não autorizado a recuperar tokens do provedor de identidade [github].
A função do token de leitura pode estar faltando em dois pontos: