Apicurio-studio: APIの公開中にエラーが発生しました

作成日 2019年06月24日  ·  5コメント  ·  ソース: Apicurio/apicurio-studio

ApiCurio(http、ポート8080)はNginx(http、ポート80)の背後で実行されています。 F5(https)はリクエストをNginxに転送します。 https://github.comに正常にリンクできAPIを公開」しようとしたときに「 _Keycloakから外部IDPアクセストークンにアクセスできませんでした:403-禁止_ 」エラーが発生しました。

KeyCloakバージョン:3.4.3。最終版。

写真から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.run(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

最も参考になるコメント

キークロークログのエラーのためにここで終わる貧しい人々のために:クライアント[apicurio-studio]はIDプロバイダー[github]からトークンを取得することを許可されていません。

読み取りトークンの役割は、次の2つの場所で欠落している可能性があります。

  1. ブローカーのクライアントのデフォルトの役割:読み取りトークンブローカーをデフォルトとして追加します。
  2. 既存のユーザー:ロールを追加します([ユーザー]-> [ユーザー]-> [ロールマッピング])。 クライアントロールブローカーを選択します。 読み取りトークンの役割を割り当てます。

全てのコメント5件

うーん。 このエラーは、ApicurioがKeycloak REST APIを呼び出して、Keycloakが管理しているGitHubアクセストークンを取得しようとしたときに発生します。 このトークンは、Apicurioが認証されたユーザーに代わってGitHubに認証された呼び出しを行うために必要です。

Keycloakが403で応答している理由がわかりません。Keycloakサーバーログにスタックトレースはありますか?

_GitHub OAuthアプリケーション:-_
image

KeyCloakの_GitHub構成:-_
image

_GitHubアカウントのリンク
image

_リンクされたGitHubへのAPIの
image

_KeyCloakログ:-_

2019-06-25 10:17:58,183警告[org.keycloak.events](デフォルトのタスク-24)type = IDENTITY_PROVIDER_RETRIEVE_TOKEN_ERROR、realmId = internal、clientId = null、userId = null、ipAddress = 10.aaa.bbb.ccc、 error =クライアント[apicurio-studio]はIDプロバイダー[github]からトークンを取得する権限がありません。
2019-06-25 10:17:58,184エラー[org.keycloak.services.resources.IdentityBrokerService](デフォルトのタスク-24)クライアント[apicurio-studio]はIDプロバイダー[github]からトークンを取得する権限がありません。

これは、(Keycloak内の) apicurio-studioクライアントに必要な役割がないことが原因である可能性があります。 私は現在詳細にアクセスできません(私は旅行中です)が、メモリから必要なある種のbrokerロールがあります。 ちょっと待ってください-インストールしたローカルKCから設定を取得できます。 ここにあります:

image

KCレルムでその設定を確認してください。

@EricWittmannは私の質問に答えてくれてありがとう。 ユーザープロファイルにブローカーの役割を追加した後、APIを公開できるようになりました。 GitHubおよびGitLabでうまく機能します。

キークロークログのエラーのためにここで終わる貧しい人々のために:クライアント[apicurio-studio]はIDプロバイダー[github]からトークンを取得することを許可されていません。

読み取りトークンの役割は、次の2つの場所で欠落している可能性があります。

  1. ブローカーのクライアントのデフォルトの役割:読み取りトークンブローカーをデフォルトとして追加します。
  2. 既存のユーザー:ロールを追加します([ユーザー]-> [ユーザー]-> [ロールマッピング])。 クライアントロールブローカーを選択します。 読み取りトークンの役割を割り当てます。
このページは役に立ちましたか?
0 / 5 - 0 評価