Apicurio-studio: Kesalahan saat memublikasikan API

Dibuat pada 24 Jun 2019  ·  5Komentar  ·  Sumber: Apicurio/apicurio-studio

ApiCurio (http, port 8080) berjalan di belakang Nginx (http, port 80). F5 (https) meneruskan permintaan ke Nginx. Saya berhasil menautkan https://github.com , tetapi " _Gagal mengakses Token Akses IDP Eksternal dari Keycloak: 403 - Forbidden_ " kesalahan saat mencoba " Terbitkan API ".

Versi KeyCloak: 3.4.3.Final.

Harap dicatat, saya mendapatkan kesalahan yang sama bahkan jika saya menghapus F5 dan Nginx dari gambar dan langsung menangani ApiCurio.

_Pesan kesalahan :-_
image

Beralih Detail :-

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

Catatan peramban : -
image

Harap beri tahu saya jika Anda memerlukan informasi tambahan.

bug question

Komentar yang paling membantu

Untuk jiwa-jiwa malang yang berakhir di sini karena kesalahan dalam log keycloak: Klien [apicurio-studio] tidak berwenang untuk mengambil token dari penyedia identitas [github].

Peran read-token mungkin hilang di dua tempat:

  1. peran default klien broker: tambahkan broker read-token sebagai default;
  2. pengguna yang ada: tambahkan peran (Pengguna->[pengguna]->Pemetaan Peran). Pilih pialang peran klien. Tetapkan peran token baca.

Semua 5 komentar

Hm. Kesalahan ini terjadi ketika Apicurio mencoba memanggil API REST Keycloak untuk mengambil token akses GitHub yang dikelola Keycloak. Token ini diperlukan agar Apicurio dapat melakukan panggilan yang diautentikasi ke GitHub atas nama pengguna yang diautentikasi.

Saya tidak tahu begitu saja mengapa Keycloak merespons dengan 403. Apakah ada jejak tumpukan di log server Keycloak?

_Aplikasi OAuth GitHub :-_
image

_Konfigurasi GitHub di KeyCloak:-_
image

_Menghubungkan akun GitHub saya
image

_Menerbitkan API saya ke GitHub yang ditautkan
image

_Log KeyCloak: -_

25-06-2019 10:17:58,183 WARN [org.keycloak.events] (tugas default-24) type=IDENTITY_PROVIDER_RETRIEVE_TOKEN_ERROR, realmId=internal, clientId=null, userId=null, ipAddress=10.aaa.bbb.ccc, error=Klien [apicurio-studio] tidak diizinkan untuk mengambil token dari penyedia identitas [github].
25-06-2019 10:17:58,184 ERROR [org.keycloak.services.resources.IdentityBrokerService] (tugas default-24) Klien [apicurio-studio] tidak diizinkan untuk mengambil token dari penyedia identitas [github].

Ini mungkin karena klien apicurio-studio (di Keycloak) tidak memiliki peran yang diperlukan. Saya tidak memiliki akses ke spesifik sekarang (saya sedang bepergian) tetapi dari memori ada semacam peran broker yang diperlukan. Oh tunggu - saya bisa mendapatkan pengaturan dari KC lokal yang telah saya instal. Ini dia:

image

Periksa pengaturan itu di ranah KC Anda.

@EricWittmann terima kasih banyak telah menanggapi pertanyaan saya. Setelah menambahkan peran broker di profil pengguna saya, saya dapat menerbitkan API. Bekerja dengan baik dengan GitHub dan GitLab.

Untuk jiwa-jiwa malang yang berakhir di sini karena kesalahan dalam log keycloak: Klien [apicurio-studio] tidak berwenang untuk mengambil token dari penyedia identitas [github].

Peran read-token mungkin hilang di dua tempat:

  1. peran default klien broker: tambahkan broker read-token sebagai default;
  2. pengguna yang ada: tambahkan peran (Pengguna->[pengguna]->Pemetaan Peran). Pilih pialang peran klien. Tetapkan peran token baca.
Apakah halaman ini membantu?
0 / 5 - 0 peringkat