I suppose that code works only with requests are made from GridRestProcessor (It isn't a client, I call it like a fake client). As a result, you can't load security on demand. If you want to do it, you should transmit HTTP session and backward address of a node which received REST request.
пн, 30 сент. 2019 г. в 16:16, Denis Garus <garus....@gmail.com>: > >>>> Subject's size is unlimited, that can lead to a dramatic increase in > traffic between nodes. > >>I added network optimization for this case. I add a subject in the case > when ctx.discovery().node(secSubjId) == null. > > Yes, this optimization is good, but we have to send SecurityContext > whenever a client starts a job. > Why? > > A better solution would be to send SecurityContext on demand. > > Imagine the following scenario. > A client connects to node A and starts a job that runs on remote node B. > IgniteSecurityProcessor on node B tries to find SecurityContext by > subjectId. > If IgniteSecurityProcessor fails, then it sends SecurityContextRequest to > node A and gets required SecurityContext > that afterward puts to the IgniteSecurityProcessor's cache on node B. > The next request to run a job on node B with this subjectId doesn't > require SecurityContext transmission. > > SecurityContextResponse can contain some additional information, for > example, > time-to-live of SecurityContext before eviction SecurityContext from the > IgniteSecurityProcessor's cache. > > пт, 27 сент. 2019 г. в 15:20, Maksim Stepachev <maksim.stepac...@gmail.com > >: > >> I finished with fixes: https://issues.apache.org/jira/browse/IGNITE-11992 >> >> >> Subject's size is unlimited, that can lead to a dramatic increase in >> traffic between nodes. >> I added network optimization for this case. I add a subject in the case >> when ctx.discovery().node(secSubjId) == null. >> >> >> Also, we need to get rid of GridTaskThreadContextKey#TC_SUBJ_ID as >> duplication of IgnitSecurity responsibility. >> [2]Yes, we should rid of this. But in the next task, because I can't >> merge it since 18 Jul 19:) >> >> [1] I aggry with you. >> >> >> пт, 27 сент. 2019 г. в 11:42, Denis Garus <garus....@gmail.com>: >> >>> Hello, Maksim! >>> >>> Thank you for your effort and interest in the security of Ignite. >>> >>> I would like you to pay attention to the discussion [1] and issue [2]. >>> It looks like not only task should execute in the current security >>> context but all operations too, that is essential to determine a security >>> id for events. >>> Also, we need to get rid of GridTaskThreadContextKey#TC_SUBJ_ID as >>> duplication of IgnitSecurity responsibility. >>> I think your task is the right place to do that. >>> What is your opinion? >>> >>> >>It's the reason why subject id isn't enough and we should transmit >>> subject inside message for this case. >>> There is a problem with this approach. >>> Subject's size is unlimited, that can lead to a dramatic increase in >>> traffic between nodes. >>> >>> 1. >>> http://apache-ignite-developers.2346864.n4.nabble.com/JavaDoc-for-Event-s-subjectId-methods-td43663.html >>> 2. https://issues.apache.org/jira/browse/IGNITE-9914 >>> >>> пт, 27 сент. 2019 г. в 08:38, Anton Vinogradov <a...@apache.org>: >>> >>>> Maksim >>>> >>>> >> I want to fix 2-3-4 points under one ticket. >>>> Please let me know once it's become ready to be reviewed. >>>> >>>> On Thu, Sep 26, 2019 at 5:18 PM Maksim Stepachev < >>>> maksim.stepac...@gmail.com> >>>> wrote: >>>> >>>> > Hi. >>>> > >>>> > Anton Vinogradov, >>>> > >>>> > I want to fix 2-3-4 points under one ticket. >>>> > >>>> > The first was fixed in the ticket: >>>> > https://issues.apache.org/jira/browse/IGNITE-11094 >>>> > Also, I aggry with you that 5-6 isn't required to ignite. >>>> > >>>> > Denis Garus, >>>> > I made reproducer for point 3. Looks at the test from my pull-request: >>>> > JettyRestPropagationSecurityContextTest >>>> > >>>> > https://github.com/apache/ignite/pull/6918 >>>> > >>>> > For point 2 you should apply GridRestProcessor from pr and set debug >>>> into >>>> > VisorQueryUtils#scheduleQueryStart between >>>> > ignite.context().closure().runLocalSafe and call: >>>> > ignite.context().security().securityContext() >>>> > >>>> > >>>> > For point 3, do action above and call: >>>> > >>>> ignite.context().discovery().node(ignite.context().security().securityContext().subject().id()) >>>> > >>>> > It returns null because this subject was created from the rest. It's >>>> the >>>> > reason why subject id isn't enough and we should transmit subject >>>> inside >>>> > message for this case. >>>> > >>>> > чт, 18 июл. 2019 г. в 12:45, Anton Vinogradov <a...@apache.org>: >>>> > >>>> >> Maksim, >>>> >> >>>> >> Could you please split IGNITE-11992 to subtasks with proper >>>> descriptions? >>>> >> This will allow us to relocate discussion to the issues to solve each >>>> >> problem properly. >>>> >> >>>> >> On Thu, Jul 18, 2019 at 11:57 AM Denis Garus <garus....@gmail.com> >>>> wrote: >>>> >> >>>> >> > Hello, Maksim! >>>> >> > Thanks for your analysis! >>>> >> > >>>> >> > I have a few questions about your proposals. >>>> >> > >>>> >> > GridRestProcessor. >>>> >> > AFAIK, when GridRestProcessor handle client request >>>> >> > (GridRestProcessor#handleRequest) >>>> >> > it process authentication (GridRestProcessor#authenticate) >>>> >> > and then authorization of request (GridRestProcessor#authorize) >>>> inside >>>> >> > client context. >>>> >> > Can you give additional info about issues with GridRestProcessor >>>> from 3 >>>> >> and >>>> >> > 4? Maybe you have a reproducer for the problem? >>>> >> > >>>> >> > NoOpIgniteSecurityProcessor. >>>> >> > I think the case that you describe in 5 is not a bug. >>>> >> > All nodes (client and server) must have security enabled or >>>> disabled. >>>> >> > I can't imagine the case when it is not. >>>> >> > >>>> >> > ATTR_SECURITY_SUBJECT. >>>> >> > I don't think that compatibility is needed here. If you will use >>>> node >>>> >> with >>>> >> > propagation security context to remote node and older nodes >>>> >> > you can get subtle errors. >>>> >> > >>>> >> > чт, 18 июл. 2019 г. в 11:12, Maksim Stepachev < >>>> >> maksim.stepac...@gmail.com >>>> >> > >: >>>> >> > >>>> >> > > Hi, Ivan. >>>> >> > > >>>> >> > > Yes, I have. >>>> >> > > https://issues.apache.org/jira/browse/IGNITE-11992 >>>> >> > > >>>> >> > > I'm waiting for a visa. >>>> >> > > >>>> >> > > >>>> >> > > чт, 18 июл. 2019 г. в 11:09, Ivan Rakov <ivan.glu...@gmail.com>: >>>> >> > > >>>> >> > >> Hello Max, >>>> >> > >> >>>> >> > >> Thanks for your analysis! >>>> >> > >> >>>> >> > >> Have you created a JIRA issue for discovered defects? >>>> >> > >> >>>> >> > >> Best Regards, >>>> >> > >> Ivan Rakov >>>> >> > >> >>>> >> > >> On 17.07.2019 17:08, Maksim Stepachev wrote: >>>> >> > >> > Hello, Igniters. >>>> >> > >> > >>>> >> > >> > The main idea of the new security is propagation security >>>> >> context >>>> >> > >> to >>>> >> > >> > other nodes and does action with initial permission. The >>>> solution >>>> >> > looks >>>> >> > >> > fine but has imperfections. >>>> >> > >> > >>>> >> > >> > 1. ZookeaperDiscoveryImpl doesn't implement security into >>>> itself. >>>> >> > >> > As a result: Caused by: class >>>> >> > >> org.apache.ignite.spi.IgniteSpiException: >>>> >> > >> > Security context isn't certain. >>>> >> > >> > 2. The visor tasks lost permission. >>>> >> > >> > The method VisorQueryUtils#scheduleQueryStart makes a new >>>> thread >>>> >> and >>>> >> > >> loses >>>> >> > >> > context. >>>> >> > >> > 3. The GridRestProcessor does tasks outside "withContext" >>>> >> section. As >>>> >> > >> > result context loses. >>>> >> > >> > 4. The GridRestProcessor isn't client, we can't read security >>>> >> subject >>>> >> > >> from >>>> >> > >> > node attribute. >>>> >> > >> > We should transmit secCtx for fake nodes and secSubjId for >>>> real. >>>> >> > >> > 5. NoOpIgniteSecurityProcessor should include a disabled >>>> processor >>>> >> and >>>> >> > >> > validate it too if it is not null. It is important for a >>>> client >>>> >> node. >>>> >> > >> > For example: >>>> >> > >> > Into IgniteKernal#securityProcessor method createComponent >>>> return a >>>> >> > >> > GridSecurityProcessor. For server nodes are enabled, but for >>>> >> clients >>>> >> > >> > aren't. The clients aren't able to pass validation for this >>>> >> reason. >>>> >> > >> > >>>> >> > >> > 6. ATTR_SECURITY_SUBJECT was removed. It broke compatibility. >>>> >> > >> > >>>> >> > >> > I going to fix it. >>>> >> > >> > >>>> >> > >> >>>> >> > > >>>> >> > >>>> >> >>>> > >>>> >>>