Shinyproxy: SAML рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯрд╛рдЗрдордЖрдЙрдЯ (?) рддреНрд░реБрдЯрд┐

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдлрд╝рд░ре░ 2021  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: openanalytics/shinyproxy

рдлрд┐рд░ рд╕реЗ рд╣реИрд▓реЛ! рдЪреВрдВрдХрд┐ рд╣рдо рдПрд╕рдПрдПрдордПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдРрдк рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рдЯреИрдм рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд░рд╣рддрд╛ рд╣реИ (рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓реЗ рд╕рдЯреАрдХ рд╕рдордп рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрдм рдЕрдкрдиреЗ рдЯреИрдм рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░рддрд╛ рд╣реИ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреЛрдИ рдирдИ рд╡рд┐рдВрдбреЛ рднреА рдЗрд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИ)ред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдЗрд╕ рд╕рдордп рдХреЗ рдмрд╛рдж, ShinyProxy рдкреБрди: рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рд╡рд╣ рд╣реИ рд╣рдорд╛рд░реЗ IdP (auth.company.com) рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рд╛рдЗрдЯ рдбреЗрдЯрд╛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ред рдПрдХ рдмрд╛рд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЪреАрдЬреЗрдВ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред

рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ ShinyProxy рд▓рдЧрд╛рддрд╛рд░ рдХрдИ рдмрд╛рд░ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ (рдореИрдВ рдпреВрдЖрд░рдПрд▓ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдПрд╕рдПрдПрдордПрд▓ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЙрд▓рдмреИрдХ рдлрд╝реНрд▓рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ), рд▓реЗрдХрд┐рди рдЕрдВрддрддрдГ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ http://my.company.com/app/saml рдкрд░ рдбрдВрдк рдХрд░ рджреЗрддрд╛ рд╣реИ

image

рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдореЗрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрддрд╛ рд╣реВрдВ:

shinyproxy-server_1  | 2021-02-15 04:00:11.531  INFO 1 --- [  XNIO-1 task-4] o.s.security.saml.log.SAMLDefaultLogger  : AuthNRequest;SUCCESS;XXX.XX.XX.XXX;https://my.company.com/app;http://auth.company.com/adfs/services/trust;;;
shinyproxy-server_1  | 2021-02-15 04:00:11.608  INFO 1 --- [  XNIO-1 task-4] colMessageXMLSignatureSecurityPolicyRule : Validation of protocol message signature succeeded, message type: {urn:oasis:names:tc:SAML:2.0:protocol}Response
shinyproxy-server_1  | 2021-02-15 04:00:11.609  INFO 1 --- [  XNIO-1 task-4] o.s.security.saml.log.SAMLDefaultLogger  : AuthNResponse;FAILURE;XXX.XX.XX.XXX;https://my.company.com/app;http://auth.company.com/adfs/services/trust;;;org.springframework.security.saml.SAMLStatusException: Response has invalid status code urn:oasis:names:tc:SAML:2.0:status:Responder, status message is null

рдХреБрдЫ рдЕрдЬреАрдм рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдпрд╛рд╕ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ ShinyProxy рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред


рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рдЯреНрд░реЗрд╕рдмреИрдХ:

~рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:88) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:219) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
Sun.reflect.GeneratedMethodAccessor63.invoke (рдЕрдЬреНрдЮрд╛рдд рд╕реНрд░реЛрдд) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
java.lang.reflect.Method.invoke(Method.java:498) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:92) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.authentication рдкрд░ред
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal (HeaderWriterFilter.java:77) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:87) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:201) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest (AbstractSecurityContextAssociationHandler.java:43) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.jboss.threads.ContextClassLoaderSavingRunnable.run рдкрд░ (ContextClassLoaderSavingRunnable.java:35)рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) рдкрд░рдЪрдордХрджрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА-рд╕рд░реНрд╡рд░_1 |
java.lang.Thread.run(Thread.java:748) рдкрд░~

рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди "рд▓реЙрдЧрдЖрдЙрдЯ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╣ рдмрдЯрди SAML рддреНрд░реБрдЯрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдорд╛рдВрдЧ рдкрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореЗрд░реЗ рдЖрдИрдбреАрдкреА рд╕рдорд░реНрдерди рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдбреАрдПрдлрдПрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рд╡реИрдз рдЯреЛрдХрди рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рд╢рд╛рдЗрдиреАрдкреНрд░реЙрдХреНрд╕реА рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдХрднреА рдмрдВрдж рдирд╣реАрдВ рд╣реБрдЖ, рд╢рд╛рдпрдж рд▓реЙрдЧрд┐рди рдХреБрдХреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд╡реАрдиреАрдХреГрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдирдордХ рдХреЗ рдЕрдирд╛рдЬ рдХреЗ рд╕рд╛рде рд▓реЗрдВред

рдЬрдм рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА, рддреЛ рдореИрдВ рдХреБрдЫ рдЙрдореНрдореАрдж рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рджреЗрдЦрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ?

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

рдореБрдЭреЗ рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА, рдЬреЛ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИ рдЬреЛ SHA-1 рдФрд░ SHA-256 рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмреАрдЪ рдПрдХ рдмреЗрдореЗрд▓ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдореЗрдВ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреА рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж рд░реБрдХ-рд░реБрдХ рдХрд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдлреЙрд▓реЛрдЕрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдРрдк рдХреЗ рдПрд╕рдПрдПрдордПрд▓ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ DEBUG рд╕реНрддрд░ рд▓реЙрдЧрд┐рдВрдЧ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛, рдФрд░ рдЗрди рдЯрд╛рдЗрдордЖрдЙрдЯ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрд╛:

shinyproxy-server_1  | 2021-02-15 21:03:14.050 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.s.context.SAMLContextProviderImpl  : No IDP specified, using default http://auth.company.com/adfs/services/trust
shinyproxy-server_1  | 2021-02-15 21:03:14.050 DEBUG 1 --- [  XNIO-1 task-2] o.s.security.saml.util.SAMLUtil          : Index for AssertionConsumerService not specified, returning default
shinyproxy-server_1  | 2021-02-15 21:03:14.051 DEBUG 1 --- [  XNIO-1 task-2] o.s.security.saml.SAMLEntryPoint         : Processing SSO using WebSSO profile
shinyproxy-server_1  | 2021-02-15 21:03:14.051 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.saml.websso.WebSSOProfileImpl      : Using default consumer service with binding urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
shinyproxy-server_1  | 2021-02-15 21:03:14.052 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.saml.storage.HttpSessionStorage    : Storing message a17g5ahbxxxxxxxxxxx454jj to session hxxxxxxJ_E8xxxxxxxxHP_TwIxxxxxxxH
shinyproxy-server_1  | 2021-02-15 21:03:14.053  INFO 1 --- [  XNIO-1 task-2] o.s.security.saml.log.SAMLDefaultLogger  : AuthNRequest;SUCCESS;XXX.XX.XXX.XX;https://my.company.com/app;http://auth.company.com/adfs/services/trust;;;
shinyproxy-server_1  | 2021-02-15 21:03:14.805 DEBUG 1 --- [  XNIO-1 task-2] o.s.security.saml.SAMLProcessingFilter   : Request is to process authentication
shinyproxy-server_1  | 2021-02-15 21:03:14.806 DEBUG 1 --- [  XNIO-1 task-2] o.s.security.saml.SAMLProcessingFilter   : Attempting SAML2 authentication using profile urn:oasis:names:tc:SAML:2.0:profiles:SSO:browser
shinyproxy-server_1  | 2021-02-15 21:03:14.811 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.saml.processor.SAMLProcessorImpl   : Retrieving message using binding urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
shinyproxy-server_1  | 2021-02-15 21:03:14.816  INFO 1 --- [  XNIO-1 task-2] colMessageXMLSignatureSecurityPolicyRule : SAML protocol message was not signed, skipping XML signature processing
shinyproxy-server_1  | 2021-02-15 21:03:14.816 DEBUG 1 --- [  XNIO-1 task-2] o.s.security.saml.util.SAMLUtil          : Found endpoint org.opensaml.saml2.metadata.impl.AssertionConsumerServiceImpl<strong i="7">@6531c789</strong> for request URL https://my.company.com/app/saml/SSO based on location attribute in metadata
shinyproxy-server_1  | 2021-02-15 21:03:14.816 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.saml.storage.HttpSessionStorage    : Message a17g5ahb0gieeh9b4e48ff6a3d454jj found in session hXmYJ_E8wf6F2plFsHP_TwIZS1Cg6n2Vu4wD4i2H, clearing
shinyproxy-server_1  | 2021-02-15 21:03:14.817 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.s.w.WebSSOProfileConsumerImpl      : Verifying issuer of the Response
shinyproxy-server_1  | 2021-02-15 21:03:14.817 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.s.w.WebSSOProfileConsumerImpl      : Verifying signature
shinyproxy-server_1  | 2021-02-15 21:03:14.820 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.s.t.MetadataCredentialResolver     : Added 1 credentials resolved from metadata of entity http://auth.company.com/adfs/services/trust
shinyproxy-server_1  | 2021-02-15 21:03:14.826 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.s.w.WebSSOProfileConsumerImpl      : Processing Bearer subject confirmation
shinyproxy-server_1  | 2021-02-15 21:03:14.836 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.s.w.WebSSOProfileConsumerImpl      : Validation of authentication statement in assertion failed, skipping
shinyproxy-server_1  | org.springframework.security.authentication.CredentialsExpiredException: Authentication statement is too old to be used with value 2021-02-15T15:51:35.161Z
                        ...
shinyproxy-server_1  | 2021-02-15 21:03:14.839 DEBUG 1 --- [  XNIO-1 task-2] o.s.s.saml.SAMLAuthenticationProvider    : Error validating SAML message
shinyproxy-server_1  |
shinyproxy-server_1  | org.opensaml.common.SAMLException: Response doesn't have any valid assertion which would pass subject validation
                       ...
shinyproxy-server_1  |
shinyproxy-server_1  | 2021-02-15 21:03:14.841  INFO 1 --- [  XNIO-1 task-2] o.s.security.saml.log.SAMLDefaultLogger  : AuthNResponse;FAILURE;XXX.XX.XXX.XX;https://my.company.com/app;http://auth.company.com/adfs/services/trust;;;org.opensaml.common.SAMLException: Response doesn't have any valid assertion which would pass subject validation
shinyproxy-server_1  |  at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:265)
                       ...
shinyproxy-server_1  |
shinyproxy-server_1  | 2021-02-15 21:03:14.842  INFO 1 --- [  XNIO-1 task-2] e.o.containerproxy.service.UserService   : Authentication failure [user: ] [error: Error validating SAML message]
shinyproxy-server_1  | 2021-02-15 21:03:14.848 DEBUG 1 --- [  XNIO-1 task-2] o.s.security.saml.SAMLProcessingFilter   : Authentication request failed: org.springframework.security.authentication.AuthenticationServiceException: Error validating SAML message
shinyproxy-server_1  |
shinyproxy-server_1  | org.springframework.security.authentication.AuthenticationServiceException: Error validating SAML message
                       ...
shinyproxy-server_1  |
shinyproxy-server_1  | 2021-02-15 21:03:14.849 DEBUG 1 --- [  XNIO-1 task-2] o.s.security.saml.SAMLProcessingFilter   : Updated SecurityContextHolder to contain null Authentication
shinyproxy-server_1  | 2021-02-15 21:03:14.849 DEBUG 1 --- [  XNIO-1 task-2] o.s.security.saml.SAMLProcessingFilter   : Delegating to authentication failure handler org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler<strong i="8">@19dec0b4</strong>
shinyproxy-server_1  | 2021-02-15 21:03:14.858 ERROR 1 --- [  XNIO-1 task-2] org.thymeleaf.TemplateEngine             : [THYMELEAF][XNIO-1 task-2] Exception processing template "/": Error resolving template [/], template might not exist or might not be accessible by any of the configured Template Resolvers
shinyproxy-server_1  | org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/], template might not exist or might not be accessible by any of the configured Template Resolvers
                       ...
shinyproxy-server_1  |
shinyproxy-server_1  | 2021-02-15 21:03:14.861 ERROR 1 --- [  XNIO-1 task-2] io.undertow.request                      : UT005023: Exception handling request to /app/error
shinyproxy-server_1  |
shinyproxy-server_1  | org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/], template might not exist or might not be accessible by any of the configured Template Resolvers

рдпрд╣ рдХреНрд░рдо рд▓рдЧрднрдЧ 2 рд╕реЗрдХрдВрдб рдореЗрдВ 7 рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ ShinyProxy рдореБрдЭреЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкреНрд░рд┐рдВрдЧрдмреВрдЯ рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда рдкрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреЛ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛рдПрдБ:

1) org.springframework.security.authentication.CredentialsExpiredException: Authentication statement is too old to be used with value 2021-02-15T15:51:35.161Z -- рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ IdP рдкрдХреНрд╖ рдкрд░ рдпрд╛ ShinyProxy рдкрдХреНрд╖ рдкрд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ

2) 2021-02-15 21:03:14.861 ERROR 1 --- [ XNIO-1 task-2] io.undertow.request : UT005023: Exception handling request to /app/error -- рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рддреНрд░реБрдЯрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдареАрдХ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ "рд▓реЙрдЧрдЖрдЙрдЯ" рдкреГрд╖реНрда рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╕рддреНрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдмрд╕ рдПрдХ рдЭрдЯрдХрд╛)

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рд╕рдореНрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХреНрд╕:

1) https://stackoverflow.com/questions/48289763/spring-security-infinite-loop-after-initial-login-and-timeout
2) https://stackoverflow.com/questions/30528636/idp-initiated-saml-login-error-authentication-statement-is-too-old-to-be-used

рд▓рд┐рдВрдХ 2 рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рд╕реБрдЭрд╛рддрд╛ рд╣реИ: (1) maxAuthenticationAge рдХреЛ ADFS рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдореЗрдВ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ рдпрд╛ (2) forceAuthN рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ

рдХреНрдпрд╛ рдпреЗ рд╢рд╛рдЗрдиреАрдкреНрд░реЙрдХреНрд╕реА рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рднреАрддрд░ рд╕реЗ рд╕рдВрднрд╡ рд╣реИрдВ, рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╕реНрдЯрдо рдмрд┐рд▓реНрдб рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ?

рдирдорд╕реНрддреЗ @jat255

рдЖрдкрдХреА рд╡рд┐рд╕реНрддреГрдд рд░рд┐рдкреЛрд░реНрдЯ рдФрд░ рд╢реЛрдз рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдХрд╛рдлреА рд╕рдВрдпреЛрдЧ рд╣реИ: рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░ рднреА рдареАрдХ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ред рдХрд▓ рдореБрдЭреЗ рдЖрдкрдХреЗ рдЬреИрд╕рд╛ рд╣реА рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдерд╛ :)

forceAuthN рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрдкрдиреА рдкреВрд░реНрдг рд╕рд╛рдЦ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдПрдбреАрдПрдлрдПрд╕ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рд╛рдЦ рдЕрднреА рднреА "рдХрд╛рдлреА рддрд╛рдЬрд╛" рд╣реИред рд╕рд╛рде рд╣реА, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЖрдИрдбреАрдкреА рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Google)ред рдЖрдк forceAuthN рдХреЛ рдЕрдкрдиреЗ saml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

proxy:
  saml:
    idp-metadata-url: ... 
    ....
    force-authn: true

рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЕрднреА рддрдХ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреВрдВрдЧрд╛ред

maxAuthenticationAge рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЕрднреА рддрдХ ShinyProxy рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдореВрд▓реНрдп рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдИрдбреАрдкреА рдХреЗ рд░реВрдк рдореЗрдВ Google рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ CredentialsExpiredException рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

@LEDfan рдЖрдкрдХреЗ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЙрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП 24 рдШрдВрдЯреЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдореБрд╕реНрдХрд╛рди: рдореИрдВрдиреЗ рдХрдо рд╕реЗ рдХрдо рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ рдореБрдЭреЗ SAML рдкреЗрд▓реЛрдб рдореЗрдВ ForceAuthn="true" рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ ShinyProxy рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдкрдХреНрд╖ред

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдлрд┐рд░ рд╕реЗ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджреЗрдЦреА рдЧрдИ), рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

jfrubioz picture jfrubioz  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

PauloJhonny picture PauloJhonny  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ