Apicurio-studio: Ошибка при публикации API

Созданный на 24 июн. 2019  ·  5Комментарии  ·  Источник: Apicurio/apicurio-studio

ApiCurio (http, порт 8080) работает за Nginx (http, порт 80). F5 (https) пересылает запрос в Nginx. Я могу успешно связать https://github.com , но « _Failed to access External IDP Access Token from Keycloak: 403 - Forbidden_ » ошибка при попытке « Опубликовать API ».

Версия KeyCloak: 3.4.3.Final.

Обратите внимание: я получаю ту же ошибку, даже если удаляю F5 и Nginx с изображения и напрямую работаю с ApiCurio.

_Сообщение об ошибке
image

Переключить детали : -

io.apicurio.hub.core.exceptions.ServerError: непредвиденная ошибка сервера
в io.apicurio.hub.api.rest.impl.AccountsResource.getOrganizations (AccountsResource.java:241)
в io.apicurio.hub.api.rest.impl.AccountsResource $ Proxy $ _ $$ _ WeldClientProxy.getOrganizations (неизвестный источник)
в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)
в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:497)
в org.jboss.resteasy.core.MethodInjectorImpl.invoke (MethodInjectorImpl.java:140)
в org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget (ResourceMethodInvoker.java:509)
в org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter (ResourceMethodInvoker.java:399)
в org.jboss.resteasy.core.ResourceMethodInvoker.lambda $ invokeOnTarget $ 0 (ResourceMethodInvoker.java:363)
в org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter (PreMatchContainerRequestContext.java:358)
в org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget (ResourceMethodInvoker.java:365)
в org.jboss.resteasy.core.ResourceMethodInvoker.invoke (ResourceMethodInvoker.java:337)
в org.jboss.resteasy.core.ResourceMethodInvoker.invoke (ResourceMethodInvoker.java:310)
в org.jboss.resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher.java:443)
в org.jboss.resteasy.core.SynchronousDispatcher.lambda $ invoke $ 4 (SynchronousDispatcher.java:233)
в org.jboss.resteasy.core.SynchronousDispatcher.lambda $ preprocess $ 0 (SynchronousDispatcher.java:139)
в org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter (PreMatchContainerRequestContext.java:358)
в org.jboss.resteasy.core.SynchronousDispatcher.preprocess (SynchronousDispatcher.java:142)
в org.jboss.resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher.java:219)
в org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service (ServletContainerDispatcher.java:227)
в org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:56)
в org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:51)
в 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)
в io.apicurio.hub.api.security.KeycloakAuthenticationFilter.doFilter (KeycloakAuthenticationFilter.java:72)
в 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)
в 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)
в io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)
в io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)
в io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter (SpanFinishingFilter.java:55)
в 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)
в 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)
в org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest (JACCContextIdHandler.java:61)
в io.undertow.server.handlers.PredicateHandler.handleRequest (PredicateHandler.java:43)
в org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest (GlobalRequestControllerHandler.java:68)
в 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)
в org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda $ create $ 0 (SecurityContextThreadSetupAction.java:105)
в org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
в org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
в org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0 (UndertowDeploymentInfoService.java:1502)
в 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. выполнить (HttpServerExchange.java:830)
в org.jboss.threads.ContextClassLoaderSavingRunnable.run (ContextClassLoaderSavingRunnable.java:35)
в org.jboss.threads.EnhancedQueueExecutor.safeRun (EnhancedQueueExecutor.java:1985)
в org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.doRunTask (EnhancedQueueExecutor.java:1487)
в org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.run (EnhancedQueueExecutor.java:1378)
в java.lang.Thread.run (Thread.java:745)
Вызвано: io.apicurio.hub.api.connectors.SourceConnectorException: java.io.IOException: неожиданный ответ от Keycloak: 403 :: Forbidden
в io.apicurio.hub.api.connectors.AbstractSourceConnector.getExternalToken (AbstractSourceConnector.java:102)
в io.apicurio.hub.api.github.GitHubSourceConnector.githubClient (GitHubSourceConnector.java:88)
в io.apicurio.hub.api.github.GitHubSourceConnector.getOrganizations (GitHubSourceConnector.java:313)
в io.apicurio.hub.api.github.GitHubSourceConnector $ Proxy $ _ $$ _ WeldClientProxy.getOrganizations (неизвестный источник)
в io.apicurio.hub.api.rest.impl.AccountsResource.getOrganizations (AccountsResource.java:239)
... еще 83
Вызвано: java.io.IOException: неожиданный ответ от Keycloak: 403 :: Forbidden
в io.apicurio.hub.api.security.KeycloakLinkedAccountsProvider.getLinkedAccountToken (KeycloakLinkedAccountsProvider.java:187)
в io.apicurio.hub.api.security.KeycloakLinkedAccountsProvider $ Proxy $ _ $$ _ WeldClientProxy.getLinkedAccountToken (неизвестный источник)
в io.apicurio.hub.api.connectors.AbstractSourceConnector.getExternalToken (AbstractSourceConnector.java:94)
... еще 87

Журнал браузера : -
image

Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация.

bug question

Самый полезный комментарий

Для тех бедняг, которые оказались здесь из-за ошибки в журнале keycloak: клиент [apicurio-studio] не авторизован для получения токенов от провайдера идентификации [github].

Роль токена чтения может отсутствовать в двух местах:

  1. роли клиента брокера по умолчанию: добавить брокера чтения токенов по умолчанию;
  2. существующий пользователь: добавьте роль (Пользователи -> [пользователь] -> Сопоставления ролей). Выберите брокера с ролью клиента. Назначьте роль токена чтения.

Все 5 Комментарий

Хм. Эта ошибка возникает, когда Apicurio пытается вызвать REST API Keycloak для получения токена доступа GitHub, которым управляет Keycloak. Этот токен необходим, чтобы Apicurio мог выполнять аутентифицированные вызовы GitHub от имени аутентифицированного пользователя.

Навскидку не знаю, почему Keycloak отвечает 403. Есть ли следы стека в журнале сервера Keycloak?

_Приложение GitHub OAuth : -_
image

_Конфигурация GitHub в KeyCloak: -_
image

_Связка моей учетной записи GitHub
image

_Публикация моего API на связанном GitHub: -_
image

_Журнал KeyCloak: -_

2019-06-25 10: 17: 58,183 WARN [org.keycloak.events] (задача по умолчанию-24) type = IDENTITY_PROVIDER_RETRIEVE_TOKEN_ERROR, realmId = internal, clientId = null, userId = null, ipAddress = 10.aaa.bbb.ccc, error = Клиент [apicurio-studio] не авторизован для получения токенов от поставщика удостоверений [github].
2019-06-25 10: 17: 58,184 ОШИБКА [org.keycloak.services.resources.IdentityBrokerService] (задача по умолчанию-24) Клиент [apicurio-studio] не авторизован для получения токенов от поставщика удостоверений [github].

Вероятно, это связано с тем, что у broker которая требуется. Ой, подождите - я могу получить настройки от местного KC, который я установил. Вот:

image

Проверьте эту настройку в вашем царстве KC.

@EricWittmann большое спасибо за ответ на мой вопрос. После добавления роли брокера в свой профиль пользователя я могу публиковать API. Хорошо работает с GitHub и GitLab.

Для тех бедняг, которые оказались здесь из-за ошибки в журнале keycloak: клиент [apicurio-studio] не авторизован для получения токенов от провайдера идентификации [github].

Роль токена чтения может отсутствовать в двух местах:

  1. роли клиента брокера по умолчанию: добавить брокера чтения токенов по умолчанию;
  2. существующий пользователь: добавьте роль (Пользователи -> [пользователь] -> Сопоставления ролей). Выберите брокера с ролью клиента. Назначьте роль токена чтения.
Была ли эта страница полезной?
0 / 5 - 0 рейтинги