Cachelagra skyddat innehåll caching-secured-content
Behörighetskänslig cachelagring gör att du kan cachelagra skyddade sidor. Dispatcher kontrollerar användarens åtkomstbehörighet för en sida innan den cachelagrade sidan levereras.
Dispatcher innehåller AuthChecker-modulen som implementerar behörighetskänslig cachelagring. När modulen är aktiverad anropar Dispatcher en AEM för att utföra användarautentisering och behörighet för det begärda innehållet. Serversvaret avgör om innehållet levereras till webbläsaren från cachen eller inte.
Eftersom autentiserings- och auktoriseringsmetoderna är specifika för den AEM distributionen måste du skapa serverpaketet.
deny
filter för att tillämpa generella säkerhetsbegränsningar. Använd behörighetskänslig cachelagring för sidor som är konfigurerade för att ge åtkomst till en delmängd av användare eller grupper.I följande diagram visas ordningen för händelser som inträffar när en webbläsare begär en sida som använder behörighetskänslig cachelagring.
Sidan cachelagras och användaren är behörig page-is-cached-and-user-is-authorized
- Dispatcher avgör att det begärda innehållet är cache-lagrat och giltigt.
- Dispatcher skickar ett begärandemeddelande till återgivningen. Avsnittet HEAD innehåller alla rubrikrader från webbläsarbegäran.
- Renderingen anropar auth checker-servern för att utföra säkerhetskontrollen och svarar på Dispatcher. Svarsmeddelandet innehåller en HTTP-statuskod på 200 som anger att användaren är behörig.
- Dispatcher skickar ett svarsmeddelande till webbläsaren som består av rubrikraderna från återgivningssvaret och det cachelagrade innehållet i brödtexten.
Sidan är inte cachelagrad och användaren är behörig page-is-not-cached-and-user-is-authorized
- Dispatcher avgör att innehållet inte cachas eller behöver uppdateras.
- Skickaren vidarebefordrar den ursprungliga begäran till återgivningen.
- Renderingen anropar den AEM autentiseringsservern (det här är inte Dispatcher AuthChcker-servleten) för att utföra en säkerhetskontroll. När användaren är auktoriserad inkluderar återgivningen den återgivna sidan i svarsmeddelandets brödtext.
- Skickaren vidarebefordrar svaret till webbläsaren. Dispatcher lägger till brödtexten i återgivningens svarsmeddelande i cachen.
Användaren är inte auktoriserad user-is-not-authorized
- Dispatcher kontrollerar cachen.
- Dispatcher skickar ett begärandemeddelande till återgivningen som innehåller alla rubrikrader från webbläsarens begäran.
- Renderingen anropar Auth Checker-servern för att utföra en säkerhetskontroll som misslyckas och återgivningen vidarebefordrar den ursprungliga begäran till Dispatcher.
- Skickaren vidarebefordrar den ursprungliga begäran till återgivningen.
- Renderingen anropar den AEM autentiseringsservern (det här är inte Dispatcher AuthChcker-servleten) för att utföra en säkerhetskontroll. När användaren är auktoriserad inkluderar återgivningen den återgivna sidan i svarsmeddelandets brödtext.
- Skickaren vidarebefordrar svaret till webbläsaren. Dispatcher lägger till brödtexten i återgivningens svarsmeddelande i cachen.
Tillämpa behörighetskänslig cachelagring implementing-permission-sensitive-caching
Så här implementerar du behörighetskänslig cachelagring:
- Utveckla en server som utför autentisering och auktorisering
- Konfigurera Dispatcher
Header always set Cache-Control private
.AEM as a Cloud Service finns i Cachning om du vill ha mer information om hur du ställer in privata cachelagringsrubriker.
Skapa Auth Checker-servleten create-the-auth-checker-servlet
Skapa och distribuera en serverdator som autentiserar och auktoriserar den användare som begär webbinnehållet. Servern kan använda vilken autentiserings- och auktoriseringsmetod som helst, t.ex. AEM användarkonto och databas-ACL:er, eller en LDAP-sökningstjänst. Du distribuerar servleten till den AEM instansen som Dispatcher använder som rendering.
Servern måste vara tillgänglig för alla användare. Därför bör din servlet utöka org.apache.sling.api.servlets.SlingSafeMethodsServlet
som ger skrivskyddad åtkomst till systemet.
Servern tar endast emot HEAD-begäranden från återgivningen, så du behöver bara implementera doHead
-metod.
Renderingen innehåller URI:n för den begärda resursen som en parameter i HTTP-begäran. En auktoriseringsserver är till exempel tillgänglig via /bin/permissioncheck
. Om du vill utföra en säkerhetskontroll på /content/geometrixx-outdoors/en.html innehåller återgivningen följande URL i HTTP-begäran:
/bin/permissioncheck?uri=/content/geometrixx-outdoors/en.html
Serletens svarsmeddelande måste innehålla följande HTTP-statuskoder:
- 200: Autentisering och auktorisering lyckades.
Följande exempelserver hämtar URL:en för den begärda resursen från HTTP-begäran. Koden använder Felix SCR Property
anteckning för att ange värdet för sling.servlet.paths
till /bin/permissionsCheck. I doHead
-metoden hämtar servern sessionsobjektet och använder checkPermission
metod för att fastställa lämplig svarskod.
Exempel på server example-servlet
package com.adobe.example;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.scr.annotations.Property;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.Session;
@Component(metatype=false)
@Service
public class AuthcheckerServlet extends SlingSafeMethodsServlet {
@Property(value="/bin/permissioncheck")
static final String SERVLET_PATH="sling.servlet.paths";
private Logger logger = LoggerFactory.getLogger(this.getClass());
public void doHead(SlingHttpServletRequest request, SlingHttpServletResponse response) {
try{
//retrieve the requested URL
String uri = request.getParameter("uri");
//obtain the session from the request
Session session = request.getResourceResolver().adaptTo(javax.jcr.Session.class);
//perform the permissions check
try {
session.checkPermission(uri, Session.ACTION_READ);
logger.info("authchecker says OK");
response.setStatus(SlingHttpServletResponse.SC_OK);
} catch(Exception e) {
logger.info("authchecker says READ access DENIED!");
response.setStatus(SlingHttpServletResponse.SC_FORBIDDEN);
}
}catch(Exception e){
logger.error("authchecker servlet exception: " + e.getMessage());
}
}
}
Konfigurera Dispatcher för behörighetskänslig cachelagring configure-dispatcher-for-permission-sensitive-caching
/allowAuthorized 1
. Se ämnet Cachelagring när autentisering används för mer information.Avsnittet auth_checker i dispatchern.any-filen styr beteendet för behörighetskänslig cachelagring. Avsnittet auth_checker innehåller följande underavsnitt:
-
url
: Värdet försling.servlet.paths
egenskapen för den servlet som utför säkerhetskontrollen. -
filter
: Filter som anger vilka mappar som behörighetsstyrd cachelagring ska användas på. Oftast ärdeny
filtret tillämpas på alla mappar, ochallow
filter tillämpas på skyddade mappar. -
headers
: Anger de HTTP-huvuden som åtkomstservern inkluderar i svaret.
När Dispatcher startas innehåller Dispatcher-loggfilen följande felsökningsnivåmeddelande:
AuthChecker: initialized with URL 'configured_url'.
I följande exempel konfigureras Dispatcher av avsnittet auth_checker så att serverpaketet för föregående ämne används. I filteravsnittet utförs behörighetskontroller endast på säkra HTML-resurser.
Exempelkonfiguration example-configuration
/auth_checker
{
# request is sent to this URL with '?uri=<page>' appended
/url "/bin/permissioncheck"
# only the requested pages matching the filter section below are checked,
# all other pages get delivered unchecked
/filter
{
/0000
{
/glob "*"
/type "deny"
}
/0001
{
/glob "/content/secure/*.html"
/type "allow"
}
}
# any header line returned from the auth_checker's HEAD request matching
# the section below will be returned as well
/headers
{
/0000
{
/glob "*"
/type "deny"
}
/0001
{
/glob "Set-Cookie:*"
/type "allow"
}
}
}