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 :-_
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 : -
Harap beri tahu saya jika Anda memerlukan informasi tambahan.
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 :-_
_Konfigurasi GitHub di KeyCloak:-_
_Menghubungkan akun GitHub saya
_Menerbitkan API saya ke GitHub yang ditautkan
_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:
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:
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: