OFBIZ-10307: Navigate from a domain to another with automated signed in authentication

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
41 messages Options
123
Reply | Threaded
Open this post in threaded view
|

Re: OFBIZ-10307: Navigate from a domain to another with automated signed in authentication

Jacques Le Roux
Administrator
This was done

Jacques


Le 10/09/2018 à 11:13, Jacques Le Roux a écrit :

> Seems nobody is against renaming so I'll create a new last patches and attach them.
>
> Jacques
>
>
> Le 30/08/2018 à 16:27, Jacques Le Roux a écrit :
>> Hi Nicolas,
>>
>> Thanks for your feedback, much appreciated. I know it's not something easy to review and even less to test.
>>
>> About the names, I see no problems to change them. I used them to try to clarify what they do. Actually for the js functions I initially used names
>> close to what you suggest. And for checkExternalServerLogin I was inspired by checkExternalLoginKey.
>>
>> I'll be happy to change them if everybody agree about that. They are short and explicit enough in the context indeed.
>>
>> Note though that Deepak created the JWTManager class in order to use JWTs for more than an use with userLogin.
>>
>> Jacques
>>
>>
>> Le 30/08/2018 à 13:58, Nicolas Malin a écrit :
>>> Globally (after Taher remarks :) ) I found the code clear. Instead of my comment about the jwt generation [1] on issue OFBIZ-9833 [2] I haven't
>>> other technical remarks that can help to improve this.
>>>
>>> Now on naming vision I suggest simple naming like this :
>>>
>>> setUserLoginIdInJwtToken -> loadJWT()
>>> sendUserLoginIdInJwtToken -> sendJWT()
>>> checkExternalServerLogin -> checkJWTLogin()
>>>
>>> Because I didn't see why we call a token without userLogin and jwt always talk about a token (Jsin Web Token) not necessary to redound it
>>>
>>> Nicolas
>>>
>>> [1]
>>> https://issues.apache.org/jira/browse/OFBIZ-9833?focusedCommentId=16594702&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16594702
>>> [2] https://issues.apache.org/jira/browse/OFBIZ-9833
>>> On 29/08/2018 12:37, Jacques Le Roux wrote:
>>>> I'll soon provide an AsciiDoc for that. I have to think about its location, any ideas?
>>>>
>>>> Jacques
>>>>
>>>>
>>>> Le 29/08/2018 à 12:06, Taher Alkhateeb a écrit :
>>>>> I couldn't find the testing mechanism and the JIRA is filled with too
>>>>> much information. Sharing a simple testing mechanism would help
>>>>> On Wed, Aug 29, 2018 at 12:33 PM Jacques Le Roux
>>>>> <[hidden email]> wrote:
>>>>>> Hi Taher,
>>>>>>
>>>>>> Before creating the last patch, I have reviewed the code a last time again,  it's totally OK now. Did you test from
>>>>>> https://localhost:8443/catalog/control/FindCatalog with the provided test patch?
>>>>>>
>>>>>> I'll now provide a simple and concise AsciiDoc documentation. Maybe with a graph, but that's not sure, I have to try...
>>>>>>
>>>>>> For the test part I'll wait for the user ML "OFBiz Sanity Test Automation" thread https://markmail.org/message/nxoyqxn7lqfupf55 to conclude before
>>>>>> endeavouring in web tests
>>>>>>
>>>>>> I don't think it should stop to commit this work, which can be tested manually using the provided patches (though the one from example needs the
>>>>>> commit to be done)
>>>>>>
>>>>>> Anyway I'll wait more feedbacks before committing, I'm not in a hurry and I know it's a sensitive feature.
>>>>>>
>>>>>> Jacques
>>>>>>
>>>>>>
>>>>>> Le 27/08/2018 à 14:55, Taher Alkhateeb a écrit :
>>>>>>> I already found problems in this code to give me pause and to show
>>>>>>> that it is not properly studied and designed. If you want to continue
>>>>>>> the effort, then I recommend reviewing your code thoroughly, providing
>>>>>>> a clear testing mechanism (especially the web scripts), and ask for
>>>>>>> reviews and tests.
>>>>>>> On Sun, Aug 26, 2018 at 12:33 PM Jacques Le Roux
>>>>>>> <[hidden email]> wrote:
>>>>>>>> Hi Taher,
>>>>>>>>
>>>>>>>> Thanks for your review, much appreciated.
>>>>>>>>
>>>>>>>>
>>>>>>>> Le 22/08/2018 à 18:42, Taher Alkhateeb a écrit :
>>>>>>>>> I reviewed the code and explanation in the beginning of this thread
>>>>>>>>> and I have the following comments:
>>>>>>>>>
>>>>>>>>> - First, in case of a result.containsKey(ModelService.ERROR_MESSAGE)
>>>>>>>>> you are still returning "success". Does not make sense at all.
>>>>>>>> You are right I should have used "error".
>>>>>>>> I did not notice (actually forgot a last own review after much variations in code) because it's an event preprocessor and no response is
>>>>>>>> expected/handled.
>>>>>>>> Not to bad, in case of error just an EventHandlerException was not thrown.
>>>>>>>>
>>>>>>>>> - Also the comments are unnecessary and do not make sense in the same code block
>>>>>>>> You mean "// Something unexpected happened here", or ?
>>>>>>>>
>>>>>>>>> - The comment you wrote: "Check it's the right tenant in case username
>>>>>>>>> and password are the same in different tenants. Not sure this is
>>>>>>>>> really useful in the case of external server, does not hurt anyway" is
>>>>>>>>> self-defeating. Never put in code you won't use. We have enough mess
>>>>>>>>> in the code base.
>>>>>>>> I must say I initially copied that from ExternalLoginKeysManager::checkExternalLoginKey and adapted it to the context. It's roughly the same
>>>>>>>> code.
>>>>>>>> I let it there because I was then unsure. But when you think about it, there is no reason to not make this check. So I'll simply remove the
>>>>>>>> comment. I
>>>>>>>> should have put a TODO.
>>>>>>>>
>>>>>>>> BTW this is out of subject and I'll start a new thread about it after reading
>>>>>>>> https://www.linkedin.com/pulse/architecture-constraints-end-multi-tenancy-gregor-hohpe/
>>>>>>>> The subject will be: "Should we keep the multi-tenants feature in OFBiz."
>>>>>>>> I though think the tenants in OFBiz are still useful when you only needs dozens or maybe even few hundreds tenants (begin to be a lot of DBs!).
>>>>>>>> But I faced that with a startup which wanted to handle thousands, if not millions (actually they failed), of tenants, obviously OFBiz can't
>>>>>>>> do that.
>>>>>>>>
>>>>>>>>> - Calling LoginWorker.doBasicLogin(userLogin, request) after the
>>>>>>>>> if/else block does not make sense. The else block guarantees falling
>>>>>>>>> into the exception. This whole code block needs refactoring
>>>>>>>> You are totally right, I have uploaded a new patch where I put the call of
>>>>>>>>        LoginWorker.doBasicLogin(userLogin, request);
>>>>>>>> in the positive part of the if and used the same block pattern than above where there is a warning log then returning an error.
>>>>>>>> I was so focused on the other parts of the mechanism, especially to secure it, than I forgot to review the Java part.
>>>>>>>> My bad, thank you again for your review.
>>>>>>>>
>>>>>>>>> - A testing method needs to be provided in detail. For example I'm not
>>>>>>>>> sure how the Javascript portions will execute and when. So some
>>>>>>>>> provision of a clear testing mechanism is necessary.
>>>>>>>> Yep, right, I'll document all the mechanism and how to use it. Pierre even proposed to make a graph in AsciiDoc, not sure I'll be able to, by
>>>>>>>> I'll try.
>>>>>>>> Actually it's only a matter of following what should be in the example component, see last OFBIZ-10307-test from example.patch.
>>>>>>>> I thought it would be enough for devs. I understand it's not, a bit of clear documentation is always welcomed, and I often advocate for it.
>>>>>>>>
>>>>>>>>> - Finally, I'm not sure this feature is needed at all. Why not just
>>>>>>>>> assign an LDAP server to take care of OFBiz and non-OFBiz in a single
>>>>>>>>> sign-on environment.
>>>>>>>> Because you don't need to have (install, maintain, etc.) a LDAP server, or whatnot (CAS, Oauth2, SAML, you name it) if you use this code,
>>>>>>>> it's ready OOTB.
>>>>>>>>
>>>>>>>>>     I see too much code being written for something
>>>>>>>>> that might not be of great value and there are other better solutions
>>>>>>>>> out there.
>>>>>>>> Which ones do you think about? And why they are better at doing this specific feature?
>>>>>>>>
>>>>>>>>> Using JWT tokens might come with problems [1] that need to
>>>>>>>>> be justified before we adopt it.
>>>>>>>> That's very interesting, let's check, after reading https://connect2id.com/products/nimbus-jose-jwt/vulnerabilities
>>>>>>>>
>>>>>>>>    1. Never let the JWT header alone drive verification
>>>>>>>>         * Not our case, we have the loginUserId ciphered in and checked. The crucial point was how to send the loginUserId securely.
>>>>>>>>    2. Know the algorithms
>>>>>>>>         * This part is handled by JWTManager class. We have begun to discuss where to store the secret key at https://s.apache.org/IiE0
>>>>>>>>    3. Use an appropriate key size
>>>>>>>>         * This part is handled by JWTManager class, which uses HMAC with SHA-512. And that's OK reading the article Wikipedia refers to.|
>>>>>>>>           |
>>>>>>>>
>>>>>>>> |Jacques|
>>>>>>>>
>>>>>>>>> [1] https://en.wikipedia.org/wiki/JSON_Web_Token#Vulnerabilities_and_criticism
>>>>>>>>> On Wed, Aug 22, 2018 at 5:22 PM Jacques Le Roux
>>>>>>>>> <[hidden email]> wrote:
>>>>>>>>>> Hi Jinghai,
>>>>>>>>>>
>>>>>>>>>> You can do if you want, but that's not possible in the context of the ASF.
>>>>>>>>>>
>>>>>>>>>> Also I'm for the ASL2 license as is, not to add a common clause.
>>>>>>>>>>
>>>>>>>>>> Of course if you pay me for that I would :D But I guess it's a joke, isn'it?
>>>>>>>>>>
>>>>>>>>>> Jacques
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Le 22/08/2018 à 14:52, Shi Jinghai a écrit :
>>>>>>>>>>> Thank you Jacques!
>>>>>>>>>>>
>>>>>>>>>>> Perhaps we can build a cloud-ready (SAAS version) OFBiz and add such a common clause :)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> -----邮件原件-----
>>>>>>>>>>> 发件人: Jacques Le Roux [mailto:[hidden email]]
>>>>>>>>>>> 发送时间: 2018年8月22日 12:11
>>>>>>>>>>> 收件人: [hidden email]
>>>>>>>>>>> 主题: Re: OFBIZ-10307: Navigate from a domain to another with automated signed in authentication
>>>>>>>>>>>
>>>>>>>>>>> Hi Jinghai,
>>>>>>>>>>>
>>>>>>>>>>> You maybe read it already, what did redislabs very recently might be affecting you
>>>>>>>>>>>
>>>>>>>>>>> https://redislabs.com/community/commons-clause/
>>>>>>>>>>>
>>>>>>>>>>> Jacques
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Le 15/08/2018 à 14:37, Shi Jinghai a écrit :
>>>>>>>>>>>> Dear Jacques,
>>>>>>>>>>>>
>>>>>>>>>>>> On how to store the Tokens, as a token is a key, value is the UserLogin entity and/or other info, a key-value db, Redis[1] is a good
>>>>>>>>>>>> choice. Redis is no.7 in db ranking in Aug 2018[2], becomes more and more popular. Goldman Sachs invested Redis team in last year[3].
>>>>>>>>>>>> It's common view now in China that Redis is better than any others including Gemfire of Pivotal, the railway ticket system of China
>>>>>>>>>>>> replaced its 3 Gemfire clusters with 3 Redis clusters last year and then there are much less complains on how difficulties to buy spring
>>>>>>>>>>>> festival tickets.
>>>>>>>>>>>>
>>>>>>>>>>>> Mr. Dai Haipeng contributed a Redis component in Jira[4].
>>>>>>>>>>>>
>>>>>>>>>>>> [1] https://redis.io/
>>>>>>>>>>>> [2] https://db-engines.com/en/ranking
>>>>>>>>>>>> [3]
>>>>>>>>>>>> https://redislabs.com/press/redis-labs-secures-44-million-funding-led-goldman-sachs-private-capital-investing-strengthen-database-leadership/
>>>>>>>>>>>> [4] https://issues.apache.org/jira/browse/OFBIZ-9829
>>>>>>>>>>>>
>>>>>>>>>>>> BTW, I'll try to review the patches.
>>>>>>>>>>>>
>>>>>>>>>>>> Kind Regards,
>>>>>>>>>>>>
>>>>>>>>>>>> Shi Jinghai
>>>>>>>>>>>>
>>>>>>>>>>>> -----邮件原件-----
>>>>>>>>>>>> 发件人: Jacques Le Roux [mailto:[hidden email]]
>>>>>>>>>>>> 发送时间: 2018年8月15日 15:09
>>>>>>>>>>>> 收件人: [hidden email]
>>>>>>>>>>>> 主题: OFBIZ-10307: Navigate from a domain to another with automated signed in authentication
>>>>>>>>>>>>
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>> Some time ago I created https://issues.apache.org/jira/browse/OFBIZ-10307.
>>>>>>>>>>>>
>>>>>>>>>>>> I asked for reviews but only Taher answered and he asked to know the goal of this new feature.
>>>>>>>>>>>>
>>>>>>>>>>>> It was actually developed for a client who needed to get from one OFBiz instance on a server (on a domain) to another OFBiz instance on
>>>>>>>>>>>> another
>>>>>>>>>>>> server (on another domain) without having to sign up between the 2 while keeping things secure.
>>>>>>>>>>>>
>>>>>>>>>>>> There could be many reasons why you want to split OFBiz application on servers. In their case it was for performance issues.
>>>>>>>>>>>>
>>>>>>>>>>>> The technology used is as secure as possible. Like OAuth 2.0 it uses a token but it does not need a middle authorization server (think to
>>>>>>>>>>>> two-factor
>>>>>>>>>>>> authentication) because it's only for OFBiz instances of the same version.
>>>>>>>>>>>>
>>>>>>>>>>>> To commit this work we need 1st to agree an commit the work done by Deepak at OFBIZ-9833 "Token Based Authentication" that I use in my
>>>>>>>>>>>> last patch.
>>>>>>>>>>>>
>>>>>>>>>>>> For me there is only one question outstanding: how to store the Token secret. But this should not prevent us to commit Deepak's work.
>>>>>>>>>>>>
>>>>>>>>>>>> It's now a long time (9 months) since I started this work. And my last patch is ready for a month.
>>>>>>>>>>>>
>>>>>>>>>>>> I crossed several issues which are now all resolved. So please review and answer to this thread.
>>>>>>>>>>>>
>>>>>>>>>>>> Without negative comments well argumented I'll commit both OFBIZ-9833 and OFBIZ-10307 in a week. You can always test and review later, we
>>>>>>>>>>>> use RTC.
>>>>>>>>>>>>
>>>>>>>>>>>> Also a veto on a commit is always possible... Of course, as ever, a good consensus is preferred.
>>>>>>>>>>>>
>>>>>>>>>>>> Let me know if you need more information about the goal. For the technical details I think I already provided them the in OFBIZ-10307.
>>>>>>>>>>>>
>>>>>>>>>>>> Jacques
>>>>>>>>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>

123