Thanks for the great advice! On Thu, Jan 29, 2015 at 12:57 PM, Mark Thomas <ma...@apache.org> wrote: > On 29/01/2015 10:54, Leonid Rozenblyum wrote: >> Hello! I'm trying to extend the SingleSignOn valve and if possible >> could you point me how can I create a global session listener >> without modifying configurations of web applications? >> >> The idea is that I should catch all 'session create' events from all >> webapps, and if they have the 'custom SSO valve' as parent - add them >> to SSO irregardless the fact the have no authentication themselves. >> >> Thanks for any help! > > Put your listener in conf/web.xml. That file is applied to all web > applications. > > Mark > > >> >> On Thu, Jan 22, 2015 at 9:44 PM, Leonid Rozenblyum >> <lrozenbl...@gmail.com> wrote: >>> Hello Mark! >>> >>> I'll investigate deeper the SingleSignOn class to understand how to >>> extend it to allow adding the session always. >>> >>> >>> To summarize : my understanding of current behaviour is following: >>> >>> - if a web application uses authentication (has security-constraint?) >>> -> then SingleSignOn will provide : >>> a) correct request.getUserPrincipal() >>> b) correct session invalidation >>> >>> - if a web application is not using authentication -> SingleSignOn >>> will just provide >>> a) correct request.getUserPrincipal() >>> >>> Probably there were some logical architectural backgrounds to take >>> this decision >>> >>> But for us it was counter-intuitive. We expected either a)+b) are both >>> available or nothing. >>> >>> Presence of just a) caused unexpected security issues in our app when >>> after logout and logging in with lower permissions user had access to >>> data stored for high-privileged user. >>> >>> Thanks for your help! >>> >>> On Thu, Jan 22, 2015 at 7:12 PM, Mark Thomas <ma...@apache.org> wrote: >>>> On 22/01/2015 16:25, Leonid Rozenblyum wrote: >>>>> So doesn't "As soon as the user logs out of one web application (for >>>>> example, by invalidating the corresponding session if form based login >>>>> is used), the user's sessions in all web applications will be >>>>> invalidated. " ( this phrase is from official doc) imply that all >>>>> sessions are invalidated and thus attributes are cleared? >>>>> >>>>> (and as I mentioned above : there is some workaround that looks like >>>>> forces Tomcat to work exactly like this). >>>> >>>> A session is only added to SSO if the web application uses >>>> authentication. You could extend the SSOValve to always add the session >>>> if you wish. >>>> >>>> Mark >>>> >>>> >>>>> >>>>> On Thu, Jan 22, 2015 at 6:21 PM, Mark Thomas <ma...@apache.org> wrote: >>>>>> On 22/01/2015 16:12, Leonid Rozenblyum wrote: >>>>>>> Probably the attachment will be cut out by the mailing server. >>>>>>> So I send the text of the test.jsp here: >>>>>>> >>>>>>> Hello >>>>>>> <br /> >>>>>>> User Principal: <%= request.getUserPrincipal() %> <br/> >>>>>>> >>>>>>> <% >>>>>>> if (request.getUserPrincipal() != null ) { >>>>>>> %> >>>>>>> User is authenticated, allow to set session attribute >>>>>>> <% >>>>>>> request.getSession().setAttribute("markerAttribute", >>>>>>> "markerAttributeValue"); >>>>>>> } >>>>>>> else { >>>>>>> %> >>>>>>> User is a guest. No setting of any session attributes. >>>>>>> <% >>>>>>> } >>>>>>> %> >>>>>> >>>>>> You need to remove the session attribute if the user is not >>>>>> authentication. >>>>>> >>>>>> Tomcat's SSO is working as expected. You are, of course, free to >>>>>> extend/patch it if you prefer. >>>>>> >>>>>> Mark >>>>>> >>>>>>> >>>>>>> <br /> >>>>>>> >>>>>>> Marker Attribute from session: <%= >>>>>>> request.getSession().getAttribute("markerAttribute") %> >>>>>>> >>>>>>> On Thu, Jan 22, 2015 at 5:51 PM, Leonid Rozenblyum >>>>>>> <lrozenbl...@gmail.com> wrote: >>>>>>>> I think I could reproduce my problem also on experimenting with your >>>>>>>> examples! >>>>>>>> >>>>>>>> I went exactly by your steps but my JSP is an extended version of >>>>>>>> yours ( I add it to attachment ) >>>>>>>> >>>>>>>> In the ROOT/test.jsp I added code to set a session attribute if the >>>>>>>> user principal is not null. >>>>>>>> I expect that after logging out via another application (using SSO) my >>>>>>>> session attribute won't be there (my expectation of SingleSignOff is >>>>>>>> complete session invalidation). >>>>>>>> >>>>>>>> However it's not the case : after logging out in security/protected >>>>>>>> the session attribute is still kept (while UserPrincipal is null). >>>>>>>> >>>>>>>> >>>>>>>> Complete scenario: >>>>>>>> >>>>>>>> - request ROOT/test.jsp >>>>>>>> - no authenticated user >>>>>>>> - no marker attribute in session >>>>>>>> >>>>>>>> - request examples/jsp/security/protected >>>>>>>> - FORM login prompt, login, see index.jsp >>>>>>>> >>>>>>>> - request ROOT/test.jsp >>>>>>>> - shows user authenticated above. SSO cookie has a path of / so gets >>>>>>>> returned with all requests. This exposes the UserPrincipal to all >>>>>>>> apps >>>>>>>> - marker attribute is shown from session. >>>>>>>> >>>>>>>> - request examples/jsp/security/protected >>>>>>>> - see index.jsp >>>>>>>> - click logout >>>>>>>> - see FORM login page >>>>>>>> >>>>>>>> - request ROOT/test.jsp >>>>>>>> - no authenticated user. As expected. Logout above has destroyed SSO >>>>>>>> session and removed SSO cookie >>>>>>>> >>>>>>>> However - the marker attribute is STILL in session of ROOT >>>>>>>> webapplication. >>>>>>>> For us it means that the session is NOT invalidated correctly. >>>>>>>> >>>>>>>> Thanks for your feedback and detail scenario you sent, I think it >>>>>>>> helped discover a probable bug... >>>>>>>> >>>>>>>> On Wed, Jan 21, 2015 at 7:06 PM, Leonid Rozenblyum >>>>>>>> <lrozenbl...@gmail.com> wrote: >>>>>>>>> Hello! >>>>>>>>> I tried 8.0.17 (previously I had 8.0.15) and we still have the same >>>>>>>>> problem with same possible workaround. >>>>>>>>> >>>>>>>>> I'll go through your examples, try them and compare what's the >>>>>>>>> difference. >>>>>>>>> >>>>>>>>> On Tue, Jan 20, 2015 at 11:52 AM, Mark Thomas <ma...@apache.org> >>>>>>>>> wrote: >>>>>>>>>> On 20/01/2015 08:10, Leonid Rozenblyum wrote: >>>>>>>>>>> Thank you, Mark! >>>>>>>>>> >>>>>>>>>> I spent some time stepping through the code using a default Tomcat >>>>>>>>>> install with the following changes: >>>>>>>>>> - SSO Valve uncommented in server.xml >>>>>>>>>> - test.jsp added to ROOT app that shows request.getUserPrincipal >>>>>>>>>> - uncomment user definitions in tomcat-users.xml >>>>>>>>>> >>>>>>>>>> Note that the examples app ships with a protected page that requires >>>>>>>>>> authentication. >>>>>>>>>> >>>>>>>>>> I see the following: >>>>>>>>>> >>>>>>>>>> - request ROOT/test.jsp >>>>>>>>>> - no authenticated user >>>>>>>>>> >>>>>>>>>> - request examples/jsp/security/protected >>>>>>>>>> - FORM login prompt, login, see index.jsp >>>>>>>>>> >>>>>>>>>> - request ROOT/test.jsp >>>>>>>>>> - shows user authenticated above. SSO cookie has a path of / so >>>>>>>>>> gets >>>>>>>>>> returned with all requests. This exposes the UserPrincipal to all >>>>>>>>>> apps >>>>>>>>>> >>>>>>>>>> - request examples/jsp/security/protected >>>>>>>>>> - see index.jsp >>>>>>>>>> - click logout >>>>>>>>>> - see FORM login page >>>>>>>>>> >>>>>>>>>> - request ROOT/test.jsp >>>>>>>>>> - no authenticated user. As expected. Logout above has destroyed >>>>>>>>>> SSO >>>>>>>>>> session and removed SSO cookie >>>>>>>>>> >>>>>>>>>> So, in short, I am seeing the behaviour you expect to see. I'm doing >>>>>>>>>> this with 9.0.x (trunk) but that should be the same as the latest >>>>>>>>>> 80.x >>>>>>>>>> release. >>>>>>>>>> >>>>>>>>>> A couple of things to check: >>>>>>>>>> - are you using the latest 8.0.x release (8.0.17 - I need to send out >>>>>>>>>> the announcement) >>>>>>>>>> - Turn on debug logging for the Host where you added the SSO valve - >>>>>>>>>> you >>>>>>>>>> should see debug messages from the SSO valve which will show when >>>>>>>>>> sessions get created, destroyed etc. >>>>>>>>>> >>>>>>>>>> Mark >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Tue, Jan 20, 2015 at 12:18 AM, Mark Thomas <ma...@apache.org> >>>>>>>>>>> wrote: >>>>>>>>>>>> On 16/01/2015 14:05, Leonid Rozenblyum wrote: >>>>>>>>>>>>> Hello Mark. >>>>>>>>>>>>> >>>>>>>>>>>>> We do explicit forced expiration of http session in one of SSO >>>>>>>>>>>>> enabled >>>>>>>>>>>>> apps (Application1 : session.invalidate() ) >>>>>>>>>>>>> and it didn't cause session expiration in other Apps >>>>>>>>>>>>> >>>>>>>>>>>>> (only workaround with adding security-constraint to other apps >>>>>>>>>>>>> that I >>>>>>>>>>>>> mentioned above helped). >>>>>>>>>>>>> >>>>>>>>>>>>> Tomcat version is 8.0.15. OS tested was both linux & windows >>>>>>>>>>>>> >>>>>>>>>>>>> Probably I need to prepare minimal test case since it looks like >>>>>>>>>>>>> a bug, right? >>>>>>>>>>>> >>>>>>>>>>>> Yes to the possible bug. Thanks but no need at this point for the >>>>>>>>>>>> test >>>>>>>>>>>> case. I'll take a look at what is going on. >>>>>>>>>>>> >>>>>>>>>>>> Mark >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Fri, Jan 16, 2015 at 2:53 PM, Mark Thomas <ma...@apache.org> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>>> On 15/01/2015 15:46, Leonid Rozenblyum wrote: >>>>>>>>>>>>>>> Hello. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I have > 2 web-applications which are running on the same host. >>>>>>>>>>>>>>> The Valve SingleSignOn is enabled. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Application1 has security-constraint and login-config elements >>>>>>>>>>>>>>> in web.xml >>>>>>>>>>>>>>> Application2, 3 etc has no such definitions >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Technically Application1 is acting as a security gate. All other >>>>>>>>>>>>>>> applications are redirected to it if userPrincipal is not found. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> In this scenario Single Sign ON works fine - after >>>>>>>>>>>>>>> authenticating in >>>>>>>>>>>>>>> Application1, all other applications have correction >>>>>>>>>>>>>>> userPrincipal. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> However Single Sign OFF doesn't work in this configuration. If I >>>>>>>>>>>>>>> logout in App1, other sessions are not invalidated. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> How can this be overcomed? Is it a bug or works-as-intended? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Explicit, forced expiration of the HTTP session in any SSO >>>>>>>>>>>>>> enabled web >>>>>>>>>>>>>> application should destroy the SSO session and in turn trigger >>>>>>>>>>>>>> the >>>>>>>>>>>>>> expiration of the HTTP session for every other SSO enabled web >>>>>>>>>>>>>> application. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Session expiration due to timeout in an SSO enabled web >>>>>>>>>>>>>> application only >>>>>>>>>>>>>> terminates the HTTP session for that web application. The SSO >>>>>>>>>>>>>> session is >>>>>>>>>>>>>> unaffected (unless this was the last HTTP session associated >>>>>>>>>>>>>> with the >>>>>>>>>>>>>> SSO session in which case the SSO session is removed). >>>>>>>>>>>>>> >>>>>>>>>>>>>> Mark >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>>>>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>>>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>>>>>>>> >>>>>>> >>>>>>> --------------------------------------------------------------------- >>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>>>>> >>>>>> >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>>> >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >> For additional commands, e-mail: users-h...@tomcat.apache.org >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org >
--------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org