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
<jacques.le.r...@les7arts.com> 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
<jacques.le.r...@les7arts.com> 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
<jacques.le.r...@les7arts.com> 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:jacques.le.r...@les7arts.com]
发送时间: 2018年8月22日 12:11
收件人: dev@ofbiz.apache.org
主题: 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:jacques.le.r...@les7arts.com]
发送时间: 2018年8月15日 15:09
收件人: dev@ofbiz.apache.org
主题: 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









Reply via email to