Apicurio-studio: Erro ao publicar API

Criado em 24 jun. 2019  ·  5Comentários  ·  Fonte: Apicurio/apicurio-studio

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: -_
image

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
image

Entre em contato se precisar de mais informações.

bug question

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:

  1. funções padrão do cliente do corretor: adicionar o corretor de token de leitura como padrão;
  2. usuário existente: adicione a função (Usuários -> [usuário] -> Mapeamentos de funções). Selecione o corretor da função do cliente. Atribua a função de token de leitura.

Todos 5 comentários

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 : -_
image

_Configuração do GitHub no
image

_Link da minha conta GitHub
image

_Publicando minha API no GitHub vinculado
image

_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á:

image

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:

  1. funções padrão do cliente do corretor: adicionar o corretor de token de leitura como padrão;
  2. usuário existente: adicione a função (Usuários -> [usuário] -> Mapeamentos de funções). Selecione o corretor da função do cliente. Atribua a função de token de leitura.
Esta página foi útil?
0 / 5 - 0 avaliações