Apicurio-studio: Fehler beim Veröffentlichen der API

Erstellt am 24. Juni 2019  ·  5Kommentare  ·  Quelle: Apicurio/apicurio-studio

Hinter Nginx (http, Port 80) läuft ApiCurio (http, Port 8080). Der F5 (https) leitet die Anfrage an Nginx weiter. Ich kann https://github.com erfolgreich verlinken, aber Fehler " API zu veröffentlichen ".

KeyCloak-Version: 3.4.3.Final.

Bitte beachten Sie, dass ich den gleichen Fehler erhalte, auch wenn ich F5 und Nginx aus dem Bild entferne und direkt mit ApiCurio umgehe.

_Fehlermeldung :-_
image

Details umschalten :-

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

Das Browserprotokoll :-
image

Bitte lassen Sie mich wissen, wenn Sie zusätzliche Informationen benötigen.

bug question

Hilfreichster Kommentar

Für diese armen Seelen, die wegen des Fehlers im Keycloak-Protokoll hier landen: Client [apicurio-studio] ist nicht berechtigt, Token vom Identitätsanbieter [github] abzurufen.

Die Read-Token-Rolle kann an zwei Stellen fehlen:

  1. Client-Standardrollen des Brokers: Fügen Sie den Read-Token-Broker als Standard hinzu;
  2. vorhandener Benutzer: fügen Sie die Rolle hinzu (Benutzer->[Benutzer]->Rollenzuordnungen). Wählen Sie Clientrollenbroker aus. Weisen Sie die Lesetoken-Rolle zu.

Alle 5 Kommentare

Hm. Dieser Fehler tritt auf, wenn Apicurio versucht, eine Keycloak-REST-API aufzurufen, um das von Keycloak verwaltete GitHub-Zugriffstoken abzurufen. Dieses Token wird benötigt, damit Apicurio im Namen des authentifizierten Benutzers authentifizierte Aufrufe an GitHub tätigen kann.

Ich weiß nicht sofort, warum Keycloak mit 403 antwortet. Gibt es Stack-Traces im Keycloak-Serverprotokoll?

_GitHub OAuth- Anwendung:-_
image

_GitHub-Konfiguration in KeyCloak:-_
image

_Verknüpfen meines GitHub- Kontos:-_
image

_Veröffentlichen meiner API auf dem verlinkten GitHub:-_
image

_KeyCloak-Protokoll: -_

25.06.2019 10:17:58,183 WARN [org.keycloak.events] (Standardaufgabe-24) type=IDENTITY_PROVIDER_RETRIEVE_TOKEN_ERROR, realmId=internal, clientId=null, userId=null, ipAddress=10.aaa.bbb.ccc, error=Client [apicurio-studio] ist nicht berechtigt, Token vom Identitätsanbieter [github] abzurufen.
2019-06-25 10:17:58,184 FEHLER [org.keycloak.services.resources.IdentityBrokerService] (Standardaufgabe-24) Client [apicurio-studio] ist nicht berechtigt, Token vom Identitätsanbieter [github] abzurufen.

Dies liegt wahrscheinlich daran, dass dem apicurio-studio- Client (in Keycloak) eine erforderliche Rolle fehlt. Ich habe gerade keinen Zugriff auf die Einzelheiten (ich bin auf Reisen), aber aus dem Gedächtnis gibt es eine Art broker Rolle, die erforderlich ist. Oh warte - ich kann die Einstellung von einem lokalen KC abrufen, den ich installiert habe. Hier ist es:

image

Überprüfen Sie diese Einstellung in Ihrem KC-Realm.

@EricWittmann vielen Dank für die Beantwortung meiner Anfrage. Nachdem ich die Brokerrolle in meinem Benutzerprofil hinzugefügt habe, kann ich APIs veröffentlichen. Funktioniert gut mit GitHub und GitLab.

Für diese armen Seelen, die wegen des Fehlers im Keycloak-Protokoll hier landen: Client [apicurio-studio] ist nicht berechtigt, Token vom Identitätsanbieter [github] abzurufen.

Die Read-Token-Rolle kann an zwei Stellen fehlen:

  1. Client-Standardrollen des Brokers: Fügen Sie den Read-Token-Broker als Standard hinzu;
  2. vorhandener Benutzer: fügen Sie die Rolle hinzu (Benutzer->[Benutzer]->Rollenzuordnungen). Wählen Sie Clientrollenbroker aus. Weisen Sie die Lesetoken-Rolle zu.
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen