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.
>>>> >> > >> >
>>>> >> > >>
>>>> >> > >
>>>> >> >
>>>> >>
>>>> >
>>>>
>>>

Reply via email to