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!

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

Reply via email to