Apicurio-studio: Error al publicar API

Creado en 24 jun. 2019  ·  5Comentarios  ·  Fuente: Apicurio/apicurio-studio

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

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
image

Por favor, avíseme si necesita información adicional.

bug question

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:

  1. Roles predeterminados del cliente del intermediario: agregue el intermediario de token de lectura como predeterminado;
  2. usuario existente: agregue el rol (Usuarios -> [usuario] -> Asignaciones de roles). Seleccione el agente de la función del cliente. Asigne la función de token de lectura.

Todos 5 comentarios

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

_Configuración de GitHub en
image

_Enlazando mi cuenta de GitHub
image

_Publicando mi API en el GitHub vinculado
image

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

image

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:

  1. Roles predeterminados del cliente del intermediario: agregue el intermediario de token de lectura como predeterminado;
  2. usuario existente: agregue el rol (Usuarios -> [usuario] -> Asignaciones de roles). Seleccione el agente de la función del cliente. Asigne la función de token de lectura.
¿Fue útil esta página
0 / 5 - 0 calificaciones