Apicurio-studio: Erreur lors de la publication de l'API

Créé le 24 juin 2019  ·  5Commentaires  ·  Source: Apicurio/apicurio-studio

ApiCurio (http, port 8080) s'exécute derrière Nginx (http, port 80). Le F5 (https) transmet la demande à Nginx. Je peux lier avec succès https://github.com , mais " _Échec d'accès au jeton d'accès IDP externe à partir de Keycloak: 403 - Forbidden_ " en essayant de " Publier l'API ".

Version KeyCloak : 3.4.3.Final.

Veuillez noter que j'obtiens la même erreur même si je supprime F5 et Nginx de l'image et traite directement avec ApiCurio.

_Message d'erreur :-_
image

Basculer les détails :-

io.apicurio.hub.core.exceptions.ServerError : erreur de serveur inattendue
à io.apicurio.hub.api.rest.impl.AccountsResource.getOrganizations(AccountsResource.java:241)
à io.apicurio.hub.api.rest.impl.AccountsResource$Proxy$_$$_WeldClientProxy.getOrganizations(Source inconnue)
à sun.reflect.NativeMethodAccessorImpl.invoke0 (méthode native)
à sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
à sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
à java.lang.reflect.Method.invoke(Method.java:497)
sur org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:140)
sur org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:509)
sur org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:399)
sur org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$0(ResourceMethodInvoker.java:363)
sur org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:358)
sur org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:365)
sur org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:337)
sur org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:310)
sur org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:443)
sur org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:233)
sur org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:139)
sur org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:358)
sur org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:142)
à org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:219)
sur org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:227)
sur org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
sur org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
sur javax.servlet.http.HttpServlet.service(HttpServlet.java:791)
à io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
à io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
sur io.apicurio.hub.api.security.KeycloakAuthenticationFilter.doFilter(KeycloakAuthenticationFilter.java:72)
sur io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
à io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
à io.apicurio.hub.api.filters.DisableCachingFilter.doFilter(DisableCachingFilter.java:66)
sur io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
à io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
à io.apicurio.hub.api.filters.CorsFilter.doFilter(CorsFilter.java:64)
sur io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
à io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
sur io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter(SpanFinishingFilter.java:55)
sur io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
à io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
à io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
à io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
à io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
à io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
à org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
à io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
sur org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)
à io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
à io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
à io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)
à io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
à io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
à io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
à io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
à io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
à io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
à io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
à io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
à io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
à io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
sur org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
à io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
sur org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
sur org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)
à io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
à io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
à io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
à io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
à io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
à io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
à io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
sur org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
sur org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
sur org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
sur org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
sur org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
à io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
à io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
à io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
à io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)
à io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
sur org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
sur org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
sur org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
sur org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
à java.lang.Thread.run(Thread.java:745)
Causé par : io.apicurio.hub.api.connectors.SourceConnectorException : java.io.IOException : réponse inattendue de Keycloak : 403::Forbidden
à io.apicurio.hub.api.connectors.AbstractSourceConnector.getExternalToken(AbstractSourceConnector.java:102)
à io.apicurio.hub.api.github.GitHubSourceConnector.githubClient(GitHubSourceConnector.java:88)
sur io.apicurio.hub.api.github.GitHubSourceConnector.getOrganizations(GitHubSourceConnector.java:313)
à io.apicurio.hub.api.github.GitHubSourceConnector$Proxy$_$$_WeldClientProxy.getOrganizations (Source inconnue)
à io.apicurio.hub.api.rest.impl.AccountsResource.getOrganizations(AccountsResource.java:239)
... 83 de plus
Causé par : java.io.IOException : réponse inattendue de Keycloak : 403::Forbidden
sur io.apicurio.hub.api.security.KeycloakLinkedAccountsProvider.getLinkedAccountToken(KeycloakLinkedAccountsProvider.java:187)
sur io.apicurio.hub.api.security.KeycloakLinkedAccountsProvider$Proxy$_$$_WeldClientProxy.getLinkedAccountToken (Source inconnue)
à io.apicurio.hub.api.connectors.AbstractSourceConnector.getExternalToken(AbstractSourceConnector.java:94)
... 87 de plus

Le journal du navigateur
image

S'il vous plaît laissez-moi savoir si vous avez besoin d'informations supplémentaires.

bug question

Commentaire le plus utile

Pour ces pauvres âmes qui se retrouvent ici à cause de l'erreur dans le journal de keycloak : le client [apicurio-studio] n'est pas autorisé à récupérer les jetons du fournisseur d'identité [github].

Le rôle de jeton de lecture peut être manquant à deux endroits :

  1. les rôles par défaut du client du courtier : ajoutez le courtier de jeton de lecture par défaut ;
  2. utilisateur existant : ajoutez le rôle (Users->[user]->Role Mappings). Sélectionnez le courtier de rôle client. Attribuez le rôle de jeton de lecture.

Tous les 5 commentaires

Hum. Cette erreur se produit lorsqu'Apicurio tente d'appeler une API REST Keycloak pour récupérer le jeton d'accès GitHub géré par Keycloak. Ce jeton est nécessaire pour qu'Apicurio puisse passer des appels authentifiés à GitHub au nom de l'utilisateur authentifié.

Je ne sais pas pourquoi Keycloak répond avec un 403. Y a-t-il des traces de pile dans le journal du serveur Keycloak ?

_Application OAuth GitHub :-_
image

_Configuration GitHub dans KeyCloak :-_
image

_Lier mon compte GitHub
image

_Publier mon API sur le GitHub lié
image

_Journal KeyCloak : -_

2019-06-25 10:17:58,183 WARN [org.keycloak.events] (tâche par défaut-24) type=IDENTITY_PROVIDER_RETRIEVE_TOKEN_ERROR, realmId=internal, clientId=null, userId=null, ipAddress=10.aaa.bbb.ccc, error=Le client [apicurio-studio] n'est pas autorisé à récupérer les jetons du fournisseur d'identité [github].
2019-06-25 10:17:58,184 ERREUR [org.keycloak.services.resources.IdentityBrokerService] (tâche par défaut-24) Le client [apicurio-studio] n'est pas autorisé à récupérer les jetons du fournisseur d'identité [github].

Cela est probablement dû au fait qu'il manque un rôle requis au client apicurio-studio (dans Keycloak). Je n'ai pas accès aux détails pour le moment (je voyage) mais de mémoire, il y a un rôle broker quelconque qui est requis. Oh, attendez - je peux obtenir le paramètre à partir d'un KC local que j'ai installé. C'est ici:

image

Vérifiez ce paramètre dans votre domaine KC.

@EricWittmann merci beaucoup d'avoir répondu à ma question. Après avoir ajouté le rôle de courtier dans mon profil utilisateur, je suis en mesure de publier des API. Fonctionne bien avec GitHub et GitLab.

Pour ces pauvres âmes qui se retrouvent ici à cause de l'erreur dans le journal de keycloak : le client [apicurio-studio] n'est pas autorisé à récupérer les jetons du fournisseur d'identité [github].

Le rôle de jeton de lecture peut être manquant à deux endroits :

  1. les rôles par défaut du client du courtier : ajoutez le courtier de jeton de lecture par défaut ;
  2. utilisateur existant : ajoutez le rôle (Users->[user]->Role Mappings). Sélectionnez le courtier de rôle client. Attribuez le rôle de jeton de lecture.
Cette page vous a été utile?
0 / 5 - 0 notes