Felix,
Were there recent releases of the bundles in question before this change was 
made. I am < 1 week away from cutting a release and we have some major bits of 
work in the AuthN area, including container and CAS authn modules. I suspect 
that the porting effort is going to be minimal but the guys who did our CAS 
authn code have been moved off the project. 

Ian
On 6 Jan 2010, at 10:49, Felix Meschberger wrote:

> Hi all,
> 
> I have now committed the changes required for SLING-966 [1].
> 
> So, if you upgrade the Sling Engine to the latest trunk, you should also
> install the new Commons Auth bundle.
> 
> Your existing AuthenticationHandler implementations will still be
> working. I have upgraded our own HTTP Basic and OpenID Authentication
> Handler implementations to make use of the new API from Commons Auth.
> 
> I now will turn to documentation and try to clarify what has been
> written in [2].
> 
> Regards
> Felix
> 
> [1] https://issues.apache.org/jira/browse/SLING-966
> [2] http://sling.apache.org/site/authentication.html
> 
> On 02.01.2010 16:29, Felix Meschberger wrote:
>> Hi,
>> 
>> I have now implemented a prototype and attached the patch (againt Sling
>> trunk) to SLING-966 [1].
>> 
>> This patch relies on ServletRequestListener support (and a finalize()
>> method) for Session clean up. We could also (readd) the Sessio.logout
>> call in the Engine's SlingMainServlet for now... (though I would really
>> prefer pure ServletRequestListener support).
>> 
>> This patch does not yet require the ResourceResolver[Factory] stuff but
>> of course would probably benefit from it as been pointed out on this thread.
>> 
>> WDYT ?
>> 
>> Regards
>> Felix
>> 
>> [1] https://issues.apache.org/jira/browse/SLING-966
>> 
>> On 18.12.2009 08:20, Felix Meschberger wrote:
>>> Hi all,
>>> 
>>> Currently Sling (the SlingMainServlet) is registered with the OSGi
>>> HttpService using an OSGi HttpContext whose handleSecurity method is
>>> implemented by means of the SlingAuthenticator class. This all is
>>> implemented in the Sling Engine bundle. See the code [1] and the
>>> documentation [2] for full details.
>>> 
>>> This has a number of drawbacks:
>>> 
>>>  * Evolution of authentication provision and implementation
>>>    is tied to the relatively unrelated Sling core implementation
>>> 
>>>  * The SlingAuthenticator class can only be used by servlets
>>>    registered with Sling itself. Servlets registered directly
>>>    with the OSGi HttpService have to implement the
>>>    HttpContext.handleSecurity themselves, thus causing code
>>>    duplication
>>> 
>>>  * The interaction between the SlingAuthenticator logging into
>>>    the repository (Putting the session in a request attribute)
>>>    and the SlingMainServlet using that session and logging it
>>>    out after request termination is somewhat asynchronous.
>>> 
>>> To remedy this situation, I propose to create a new bundle with the
>>> authentication stuff in the Engine bundle: The o.a.s.engine.auth and
>>> o.a.s.engine.impl.auth packages.
>>> 
>>> This allows for re-use of the authentication mechanisms by other servlets.
>>> 
>>> To enable authentication support a new Service interface is defined
>>> which allows to implement the handleSecurity method and which allows for
>>> proper cleanup at the end of the request.
>>> 
>>> There are some options to consider, though, and an optimal solution
>>> escapes my mind right now...
>>> 
>>> 
>>> Option 1: Provide clean up API in the authentication service interface
>>> 
>>> The service interface is defined as:
>>> 
>>>   public interface AuthenticationSupport {
>>>      public boolean handleSecurity(
>>>             HttpServletRequest, HttpServletResponse);
>>>      public void endRequest(HttpServletRequest);
>>>   }
>>> 
>>> The handleSecurity method is meant to implement the
>>> HttpService.handleSecurity method. It is speced accordingly -- also
>>> requiring the request attributes to be set. Additionally, the method
>>> must set a ResourceResolver attribute (not a JCR session) for use by the
>>> client.
>>> 
>>> The endRequest method must be called by the client when request
>>> processing has terminated. The intent is for the AuthenticationSupport
>>> service to cleanup -- namely logout an JCR session.
>>> 
>>> The drawback of this option is, that it is assymmetric: HttpContext has
>>> to call handleSecurity, the registered Servlet has to call endRequest.
>>> 
>>> Option 2: Implement ServletRequestListener
>>> 
>>> The service interface is defined as:
>>> 
>>>   public interface AuthenticationSupport {
>>>      public boolean handleSecurity(
>>>             HttpServletRequest, HttpServletResponse);
>>>   }
>>> 
>>> The handleSecurity method is meant to implement the
>>> HttpService.handleSecurity method. It is speced accordingly -- also
>>> requiring the request attributes to be set. Additionally, the method
>>> must set a ResourceResolver attribute (not a JCR session) for use by the
>>> client.
>>> 
>>> In addition the SlingAuthenticator registers itself as a
>>> ServletRequestListener handling the requestDestroyed method to cleanup
>>> any setups from the handleSecurity method, namely logging out JCR
>>> Session(s).
>>> 
>>> The drawback of this option is, that it requires support to register a
>>> ServletRequestListener. This is something which is not supported by the
>>> HttpService spec and thus may only be supported by extended
>>> implementation (or any future HttpService or similar spec).
>>> 
>>> 
>>> WDYT ?
>>> 
>>> Regards
>>> Felix
>>> 
>>> 
>>> [1] https://svn.apache.org/repos/asf/sling/trunk/bundles/engine
>>> [2] http://sling.apache.org/site/authentication.html
>>> 

Reply via email to