ApiCurio (http, puerto 8080) se ejecuta detrás de Nginx (http, puerto 80). El F5 (https) reenvía la solicitud a Nginx. Puedo vincular con éxito https://github.com , pero " _Failed to access External IDP Access Token from Keycloak: 403 - Forbidden_ " error al intentar " Publicar API ".
Versión de KeyCloak: 3.4.3.Final.
Tenga en cuenta que recibo el mismo error incluso si elimino F5 y Nginx de la imagen y trato directamente con ApiCurio.
_Mensaje de error: -_
Toggle Details : -
io.apicurio.hub.core.exceptions.ServerError: Error de servidor inesperado
en io.apicurio.hub.api.rest.impl.AccountsResource.getOrganizations (AccountsResource.java:241)
en io.apicurio.hub.api.rest.impl.AccountsResource $ Proxy $ _ $$ _ WeldClientProxy.getOrganizations (Fuente desconocida)
en sun.reflect.NativeMethodAccessorImpl.invoke0 (método nativo)
en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
en java.lang.reflect.Method.invoke (Method.java:497)
en org.jboss.resteasy.core.MethodInjectorImpl.invoke (MethodInjectorImpl.java:140)
en org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget (ResourceMethodInvoker.java:509)
en org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter (ResourceMethodInvoker.java:399)
en org.jboss.resteasy.core.ResourceMethodInvoker.lambda $ invokeOnTarget $ 0 (ResourceMethodInvoker.java:363)
en org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter (PreMatchContainerRequestContext.java:358)
en org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget (ResourceMethodInvoker.java:365)
en org.jboss.resteasy.core.ResourceMethodInvoker.invoke (ResourceMethodInvoker.java:337)
en org.jboss.resteasy.core.ResourceMethodInvoker.invoke (ResourceMethodInvoker.java:310)
en org.jboss.resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher.java:443)
en org.jboss.resteasy.core.SynchronousDispatcher.lambda $ invoke $ 4 (SynchronousDispatcher.java:233)
en org.jboss.resteasy.core.SynchronousDispatcher.lambda $ preprocess $ 0 (SynchronousDispatcher.java:139)
en org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter (PreMatchContainerRequestContext.java:358)
en org.jboss.resteasy.core.SynchronousDispatcher.preprocess (SynchronousDispatcher.java:142)
en org.jboss.resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher.java:219)
en org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service (ServletContainerDispatcher.java:227)
en org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:56)
en org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:51)
en javax.servlet.http.HttpServlet.service (HttpServlet.java:791)
en io.undertow.servlet.handlers.ServletHandler.handleRequest (ServletHandler.java:74)
en io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:129)
en io.apicurio.hub.api.security.KeycloakAuthenticationFilter.doFilter (KeycloakAuthenticationFilter.java:72)
en io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)
en io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)
en io.apicurio.hub.api.filters.DisableCachingFilter.doFilter (DisableCachingFilter.java:66)
en io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)
en io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)
en io.apicurio.hub.api.filters.CorsFilter.doFilter (CorsFilter.java:64)
en io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)
en io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)
en io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter (SpanFinishingFilter.java:55)
en io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)
en io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)
en io.undertow.servlet.handlers.FilterHandler.handleRequest (FilterHandler.java:84)
en io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest (ServletSecurityRoleHandler.java:62)
en io.undertow.servlet.handlers.ServletChain $ 1.handleRequest (ServletChain.java:68)
en io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest (ServletDispatchingHandler.java:36)
en org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest (SecurityContextAssociationHandler.java:78)
en io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
en org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest (UndertowAuthenticatedActionsHandler.java:66)
en io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest (SSLInformationAssociationHandler.java:132)
en io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest (ServletAuthenticationCallHandler.java:57)
en io.undertow.server.handlers.DisableCacheHandler.handleRequest (DisableCacheHandler.java:33)
en io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
en io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest (AuthenticationConstraintHandler.java:53)
en io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest (AbstractConfidentialityHandler.java:46)
en io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest (ServletConfidentialityConstraintHandler.java:64)
en io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest (ServletSecurityConstraintHandler.java:59)
en io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest (AuthenticationMechanismsHandler.java:60)
en io.undertow.servlet.handlers.security.CchedAuthenticatedSessionHandler.handleRequest (CachedAuthenticatedSessionHandler.java:77)
en io.undertow.security.handlers.NotificationReceiverHandler.handleRequest (NotificationReceiverHandler.java:50)
en io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest (AbstractSecurityContextAssociationHandler.java:43)
en io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
en org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest (JACCContextIdHandler.java:61)
en io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
en org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest (GlobalRequestControllerHandler.java:68)
en org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest (ServletPreAuthActionsHandler.java:69)
en io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
en io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest (ServletInitialHandler.java:292)
en io.undertow.servlet.handlers.ServletInitialHandler.access $ 100 (ServletInitialHandler.java:81)
en io.undertow.servlet.handlers.ServletInitialHandler $ 2.call (ServletInitialHandler.java:138)
en io.undertow.servlet.handlers.ServletInitialHandler $ 2.call (ServletInitialHandler.java:135)
en io.undertow.servlet.core.ServletRequestContextThreadSetupAction $ 1.call (ServletRequestContextThreadSetupAction.java:48)
en io.undertow.servlet.core.ContextClassLoaderSetupAction $ 1.call (ContextClassLoaderSetupAction.java:43)
en org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda $ create $ 0 (SecurityContextThreadSetupAction.java:105)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
en io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest (ServletInitialHandler.java:272)
en io.undertow.servlet.handlers.ServletInitialHandler.access $ 000 (ServletInitialHandler.java:81)
en io.undertow.servlet.handlers.ServletInitialHandler $ 1.handleRequest (ServletInitialHandler.java:104)
en io.undertow.server.Connectors.executeRootHandler (Connectors.java:360)
en io.undertow.server.HttpServerExchange $ 1.run (HttpServerExchange.java:830)
en org.jboss.threads.ContextClassLoaderSavingRunnable.run (ContextClassLoaderSavingRunnable.java:35)
en org.jboss.threads.EnhancedQueueExecutor.safeRun (EnhancedQueueExecutor.java:1985)
en org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.doRunTask (EnhancedQueueExecutor.java:1487)
en org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.run (EnhancedQueueExecutor.java:1378)
en java.lang.Thread.run (Thread.java:745)
Causado por: io.apicurio.hub.api.connectors.SourceConnectorException: java.io.IOException: Respuesta inesperada de Keycloak: 403 :: Forbidden
en io.apicurio.hub.api.connectors.AbstractSourceConnector.getExternalToken (AbstractSourceConnector.java:102)
en io.apicurio.hub.api.github.GitHubSourceConnector.githubClient (GitHubSourceConnector.java:88)
en io.apicurio.hub.api.github.GitHubSourceConnector.getOrganizations (GitHubSourceConnector.java:313)
en io.apicurio.hub.api.github.GitHubSourceConnector $ Proxy $ _ $$ _ WeldClientProxy.getOrganizations (Fuente desconocida)
en io.apicurio.hub.api.rest.impl.AccountsResource.getOrganizations (AccountsResource.java:239)
... 83 más
Causado por: java.io.IOException: Respuesta inesperada de Keycloak: 403 :: Forbidden
en io.apicurio.hub.api.security.KeycloakLinkedAccountsProvider.getLinkedAccountToken (KeycloakLinkedAccountsProvider.java:187)
en io.apicurio.hub.api.security.KeycloakLinkedAccountsProvider $ Proxy $ _ $$ _ WeldClientProxy.getLinkedAccountToken (Fuente desconocida)
en io.apicurio.hub.api.connectors.AbstractSourceConnector.getExternalToken (AbstractSourceConnector.java:94)
... 87 más
El registro del navegador
Por favor, avíseme si necesita información adicional.
Hm. Este error ocurre cuando Apicurio intenta invocar una API REST de Keycloak para recuperar el token de acceso de GitHub que administra Keycloak. Este token es necesario para que Apicurio pueda realizar llamadas autenticadas a GitHub en nombre del usuario autenticado.
No sé de antemano por qué Keycloak responde con un 403. ¿Hay rastros de pila en el registro del servidor de Keycloak?
_Aplicación de GitHub OAuth : -_
_Configuración de GitHub en
_Enlazando mi cuenta de GitHub
_Publicando mi API en el GitHub vinculado
_Registro de KeyCloak: -_
2019-06-25 10: 17: 58,183 WARN [org.keycloak.events] (tarea predeterminada-24) tipo = IDENTITY_PROVIDER_RETRIEVE_TOKEN_ERROR, realmId = internal, clientId = null, userId = null, ipAddress = 10.aaa.bbb.ccc, error = El cliente [apicurio-studio] no está autorizado para recuperar tokens del proveedor de identidad [github].
2019-06-25 10: 17: 58,184 ERROR [org.keycloak.services.resources.IdentityBrokerService] (tarea predeterminada-24) El cliente [apicurio-studio] no está autorizado para recuperar tokens del proveedor de identidad [github].
Es probable que esto se deba a que al cliente de broker
de algún tipo que se requiere. Oh, espera, puedo obtener la configuración de un KC local que he instalado. Aquí está:
Verifique esa configuración en su reino KC.
@EricWittmann muchas gracias por responder a mi consulta. Después de agregar el rol de corredor en mi perfil de usuario, puedo publicar API. Funciona bien con GitHub y GitLab.
Para aquellas pobres almas que terminan aquí debido al error en el registro de keycloak: El cliente [apicurio-studio] no está autorizado a recuperar tokens del proveedor de identidad [github].
La función de token de lectura puede faltar en dos lugares:
Comentario más útil
Para aquellas pobres almas que terminan aquí debido al error en el registro de keycloak: El cliente [apicurio-studio] no está autorizado a recuperar tokens del proveedor de identidad [github].
La función de token de lectura puede faltar en dos lugares: