[
https://issues.apache.org/jira/browse/SLING-319?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Felix Meschberger updated SLING-319:
------------------------------------
Component/s: (was: JCR Resource)
> Streamlining authentication and access control
> ----------------------------------------------
>
> Key: SLING-319
> URL: https://issues.apache.org/jira/browse/SLING-319
> Project: Sling
> Issue Type: Improvement
> Components: Engine
> Reporter: Felix Meschberger
> Assignee: Felix Meschberger
> Fix For: 3
>
>
> Sling handles authentication and access control using the JCR repository on
> which it is running:
> Authentication:
> * The SlingAuthenticator uses one or AuthenticationHandler services to
> extract Credential instances from the request
> * Next the Credential instance is used to authenticate agains the repository
> * If there are no credentials in the request and the SlingAuthenticator is
> configured to allow anonymous acces, an anonymous request is assumed
> Access Control:
> * JCR is specified to not throw AccessControlException on read acces.
> Rather the requested item is aassumed as if it would not be existing. To
> simulate access control, the JCR ResourceResolver implementation first checks
> for the existence with an administrative session, which is assumed to have
> full read-rights, and then checks read-rights using the request session.
> * If access to the resource addressed by the request URI is denied, 401 is
> sent to request authentication if the request is not authenticated or 404 if
> the request is authenticated
> * Any AccessControlException thrown during request processing (also
> read-access) results in a 404 being sent back.
> Now, this is somewhat problematic in various aspects:
> * Authentication may be forced, when it should not be or when the user
> cannot authenticate anyway, because he has no knowledge
> * The specification of JCR not to throw AccessControlException on
> read-access is by intent to not indicate whether an item exists (but cannot
> be accessed) or does not exist at all.
> * Authentication is probably the task of the application and should not be
> enforced by Sling
> * If no repository is available for authentication, the request is
> terminated with a 403/FORBIDDEN status
> Considering this situation, I propose to change this behaviour as follows:
> (1) The JCR ResourceResolver does not check for real item existence and item
> read access any more. This makes the implementation simpler and somewhat
> faster, because each item is only checked once instead of once or twice and
> we do not need an administrative session for resource resolution. Missing
> read-access rights result in just not being able to find the item and thus
> may lead to 404/NOT FOUND.
> (2) Any AccessControlException thrown during request processing is returned
> as 403/FORBIDDEN. Most of the times, users may not be able to authenticate
> with different credentials anyway, so sending 401/UNAUTHORIZED just confuses.
> (3) Only if Sling is configured to not allow Anonymous access will a
> 401/UNAUTHORIZED response be sent (Anonymous access is currently allowed by
> default). Sending 401/UNAUTHORIZED is valid for HTTP Header authentication
> (BASIC, DIGEST, NTLM) only. Other authentication methods will handle
> authentication requests differently as implemented by the respective handler;
> other authentication mechanisms may use other status codes.
> (4) If a request is trying to authenticate but authentication fails, a
> 401/UNAUTHORIZED is sent back. Same as with (3) above, 401 is HTTP Header
> authentication specific, other protocols may use different status codes.
> (5) The authentication process is left to the application. Sling provides a
> simple Form-Based mechanism which uses XHR for HTTP authentication as a
> sample/default mechanism together with the HTTP Header Authenticator we have.
> This serves as a showcase for how to implement AuthenticationHandlers in
> Sling.
> (6) If the repository is not actually available to access 503/SERVICE
> UNAVAILABLE is sent back as is used if for some reason Sling is not ready to
> handle requests.
> (7) If we should ever integrate WebDAV access through the SlingMainServlet,
> we will have to investigated how to ensure 401 is sent to allow the user to
> authenticate even if anonymous would actually be allowed.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.