Apicurio-studio: рдПрдкреАрдЖрдИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдЬреВрди 2019  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Apicurio/apicurio-studio

ApiCurio (http, рдкреЛрд░реНрдЯ 8080) Nginx (http, рдкреЛрд░реНрдЯ 80) рдХреЗ рдкреАрдЫреЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИред F5 (https) Nginx рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдореИрдВ https://github.com рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди " _рдХреАрдХреНрд▓реЛрдХ рд╕реЗ рдмрд╛рд╣рд░реА рдЖрдИрдбреАрдкреА рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: 403 - рдирд┐рд╖рд┐рджреНрдз_ " " рдПрдкреАрдЖрдИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ " рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐ред

рдХреАрдХреНрд▓реЛрдХ рд╕рдВрд╕реНрдХрд░рдг: 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$ рдкрд░ $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 :: рдирд┐рд╖рд┐рджреНрдз
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::рдирд┐рд╖рд┐рджреНрдз
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

рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдПред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреАрдХреНрд▓реЛрдХ рд▓реЙрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдпрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЙрди рдЧрд░реАрдм рдЖрддреНрдорд╛рдУрдВ рдХреЗ рд▓рд┐рдП: рдХреНрд▓рд╛рдЗрдВрдЯ [рдПрдкрд┐рдХреБрд░рд┐рдпреЛ-рд╕реНрдЯреВрдбрд┐рдпреЛ] рдкрд╣рдЪрд╛рди рдкреНрд░рджрд╛рддрд╛ [рдЧреАрдердм] рд╕реЗ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ рд╣реИред

рд░реАрдб-рдЯреЛрдХрди рднреВрдорд┐рдХрд╛ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддреА рд╣реИ:

  1. рдмреНрд░реЛрдХрд░ рдХреА рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднреВрдорд┐рдХрд╛рдПрдБ: рд░реАрдб-рдЯреЛрдХрди рдмреНрд░реЛрдХрд░ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ;
  2. рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: рднреВрдорд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдВ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-> [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛] -> рднреВрдорд┐рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг)ред рдХреНрд▓рд╛рдЗрдВрдЯ рд░реЛрд▓ рдмреНрд░реЛрдХрд░ рдЪреБрдиреЗрдВред рд░реАрдб-рдЯреЛрдХрди рднреВрдорд┐рдХрд╛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рдореНрдоред рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛ рд░рд╣реА рд╣реИ рдЬрдм Apicurio Keycloak рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ GitHub рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Keycloak REST API рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдкрд┐рдХреБрд░рд┐рдпреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рдЧрд┐рдЯрд╣рдм рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХреЙрд▓ рдХрд░ рд╕рдХреЗред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ Keycloak 403 рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕рд╛рдж рдХреНрдпреЛрдВ рджреЗ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ Keycloak рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдореЗрдВ рдХреЛрдИ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╣реИ?

_GitHub OAuth рдПрдкреНрд▓рд┐рдХреЗрд╢рди :-_
image

KeyCloak рдореЗрдВ _GitHub рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди :-_
image

_рдореЗрд░реЗ GitHub рдЦрд╛рддреЗ рдХреЛ рд▓рд┐рдВрдХ
image

_рдореЗрд░реЗ рдПрдкреАрдЖрдИ рдХреЛ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдЧрд┐рдЯрд╣рдм рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ :-_
image

_рдХреАрдХреНрд▓реЛрдХ рд▓реЙрдЧ: -_

2019-06-25 10:17:58,183 рдЪреЗрддрд╛рд╡рдиреА [org.keycloak.events] (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдп-24) рдкреНрд░рдХрд╛рд░=IDENTITY_PROVIDER_RETRIEVE_TOKEN_ERROR, realmId=internal, clientId=null, userId=null, ipAddress=10.aaa.bbb.ccc, рддреНрд░реБрдЯрд┐ = рдХреНрд▓рд╛рдЗрдВрдЯ [рдПрдкрд┐рдХреБрд░рд┐рдпреЛ-рд╕реНрдЯреВрдбрд┐рдпреЛ] рдкрд╣рдЪрд╛рди рдкреНрд░рджрд╛рддрд╛ [рдЧреАрдердм] рд╕реЗ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ рд╣реИред
2019-06-25 10:17:58,184 рддреНрд░реБрдЯрд┐ [org.keycloak.services.resources.IdentityBrokerService] (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдп -24) рдХреНрд▓рд╛рдЗрдВрдЯ [рдПрдкрд┐рдХреБрд░рд┐рдпреЛ-рд╕реНрдЯреВрдбрд┐рдпреЛ] рдкрд╣рдЪрд╛рди рдкреНрд░рджрд╛рддрд╛ [рдЬреАрдердм] рд╕реЗ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдкрд┐рдХреНрдпреВрд░рд┐рдпреЛ-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреНрд▓рд╛рдЗрдВрдЯ (рдХреАрдХреНрд▓реЛрдХ рдореЗрдВ) рдореЗрдВ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ (рдореИрдВ рдпрд╛рддреНрд░рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ) рд▓реЗрдХрд┐рди рд╕реНрдореГрддрд┐ рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА broker рднреВрдорд┐рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдУрд╣ рд░реБрдХреЛ - рдореИрдВ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдХреЗрд╕реА рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд░рд╣рд╛:

image

рдЕрдкрдиреЗ KC рджрд╛рдпрд░реЗ рдореЗрдВ рдЙрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

@EricWittmann рдореЗрд░реА рдХреНрд╡реЗрд░реА рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд▓рд╛рд▓ рднреВрдорд┐рдХрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдПрдкреАрдЖрдИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдБред рдЧрд┐рдЯрд╣рдм рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреАрдХреНрд▓реЛрдХ рд▓реЙрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдпрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЙрди рдЧрд░реАрдм рдЖрддреНрдорд╛рдУрдВ рдХреЗ рд▓рд┐рдП: рдХреНрд▓рд╛рдЗрдВрдЯ [рдПрдкрд┐рдХреБрд░рд┐рдпреЛ-рд╕реНрдЯреВрдбрд┐рдпреЛ] рдкрд╣рдЪрд╛рди рдкреНрд░рджрд╛рддрд╛ [рдЧреАрдердм] рд╕реЗ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ рд╣реИред

рд░реАрдб-рдЯреЛрдХрди рднреВрдорд┐рдХрд╛ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддреА рд╣реИ:

  1. рдмреНрд░реЛрдХрд░ рдХреА рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднреВрдорд┐рдХрд╛рдПрдБ: рд░реАрдб-рдЯреЛрдХрди рдмреНрд░реЛрдХрд░ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ;
  2. рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: рднреВрдорд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдВ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-> [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛] -> рднреВрдорд┐рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг)ред рдХреНрд▓рд╛рдЗрдВрдЯ рд░реЛрд▓ рдмреНрд░реЛрдХрд░ рдЪреБрдиреЗрдВред рд░реАрдб-рдЯреЛрдХрди рднреВрдорд┐рдХрд╛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

null-dev picture null-dev  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

EricWittmann picture EricWittmann  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Nicnl picture Nicnl  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AguRyan picture AguRyan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jonathanvila picture jonathanvila  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ