Werken met het delen van bronnen met verschillende oorsprong (CORS)
Het delen van het Middel van het Middel van de Verkomst van Adobe Experience Manager (CORS) vergemakkelijkt niet-AEM Web-eigenschappen om cliënt-zijvraag aan AEM te maken, zowel voor authentiek verklaard als niet voor authentiek verklaard, om inhoud te halen of direct met AEM in wisselwerking te staan.
De configuratie OSGI die in dit document wordt beschreven is voldoende voor:
- Delen van bronnen van één oorsprong op AEM Publish
- Toegang van CORS tot AEM auteur
Als de multi-oorsprong toegang van CORS op AEM Publish wordt vereist, verwijs naar deze documentatie.
Adobe Granite Cross-Origin Resource Sharing Policy OSGi configuratie
De configuraties van CORS worden beheerd als OSGi- configuratiefabrieken in AEM, waarbij elk beleid als één geval van de fabriek wordt vertegenwoordigd.
http://<host>:<port>/system/console/configMgr > Adobe Granite Cross Origin Resource Sharing Policy
Adobe Granite Cross-Origin Resource Sharing Policy (com.adobe.granite.cors.impl.CORSPolicyImpl
)
Beleidsselectie
Een beleid wordt geselecteerd door te vergelijken
Allowed Origin
met deOrigin
request header- en
Allowed Paths
met het aanvraagpad.
Het eerste beleid dat deze waarden afstemt, wordt gebruikt. Als er geen wordt gevonden, wordt een CORS -aanvraag afgewezen.
Als er helemaal geen beleid is geconfigureerd, worden CORS -aanvragen ook niet beantwoord omdat de handler is uitgeschakeld en dus feitelijk wordt geweigerd, zolang geen andere module van de server reageert op CORS .
Beleidseigenschappen
Allowed Origins
"alloworigin" <origin> | *
- Lijst met
origin
-parameters die URI's opgeven die toegang kunnen krijgen tot de bron. Voor aanvragen zonder referenties kan de server * als jokerteken opgeven, zodat elke oorsprong toegang heeft tot de bron. het is absoluut niet geadviseerd omAllow-Origin: *
in productie te gebruiken aangezien het elke buitenlandse (d.w.z. aanvaller) website toestaat om verzoeken te doen die zonder CORS strikt door browsers worden verboden.
Allowed Origins (Regexp)
"alloworiginregexp" <regexp>
- Lijst met reguliere expressies van
regexp
die URI's opgeven die toegang kunnen krijgen tot de bron. de regelmatige uitdrukkingen kunnen tot onbedoelde gelijken leiden als niet zorgvuldig gebouwd, toestaand een aanvaller om een naam van het douanedomein te gebruiken die ook het beleid zou aanpassen. Over het algemeen wordt aangeraden voor elke specifieke oorspronkelijke hostnaam een apart beleid te gebruiken metalloworigin
, zelfs als dat betekent dat de andere beleidseigenschappen herhaaldelijk moeten worden geconfigureerd. Verschillende afkomst heeft vaak verschillende levenscycli en eisen, en profiteert dus van een duidelijke scheiding.
Allowed Paths
"allowedpaths" <regexp>
- Lijst met reguliere expressies van
regexp
die bronpaden aangeven waarop het beleid van toepassing is.
Exposed Headers
"exposedheaders" <header>
- Lijst met koptekstparameters die responsheaders aangeven waartoe browsers toegang hebben. Voor CORS-aanvragen (niet vóór de vlucht) worden deze waarden gekopieerd naar de
Access-Control-Expose-Headers
response header als ze niet leeg zijn. De waarden in de lijst (koptekstnamen) worden vervolgens toegankelijk gemaakt voor de browser. Als dit niet het geval is, kunnen deze kopteksten niet worden gelezen door de browser.
Maximum Age
"maxage" <seconds>
- Een parameter
seconds
die aangeeft hoe lang de resultaten van een aan de vlucht voorafgaande aanvraag in de cache kunnen worden opgeslagen.
Supported Headers
"supportedheaders" <header>
- Lijst met
header
-parameters die aangeven welke HTTP-aanvraagheaders kunnen worden gebruikt bij het uitvoeren van de eigenlijke aanvraag.
Allowed Methods
"supportedmethods"
- Lijst met methodeparameters die aangeven welke HTTP-methoden kunnen worden gebruikt bij het uitvoeren van de eigenlijke aanvraag.
Supports Credentials
"supportscredentials" <boolean>
- A
boolean
die erop wijst of de reactie op het verzoek aan browser kan worden blootgesteld of niet. Indien gebruikt als onderdeel van een reactie op een verzoek vóór de vlucht, geeft dit aan of het feitelijke verzoek kan worden ingediend met behulp van referenties.
Voorbeelden van configuraties
Site 1 is een eenvoudig, anoniem toegankelijk, alleen-lezen scenario waarbij inhoud wordt verbruikt via GET -aanvragen:
{
"supportscredentials":false,
"exposedheaders":[
""
],
"supportedmethods":[
"GET",
"HEAD"
],
"alloworigin":[
"http://127.0.0.1:3000",
"https://site1.com"
],
"maxage:Integer": 1800,
"alloworiginregexp":[
"http://localhost:.*"
"https://.*\.site1\.com"
],
"allowedpaths":[
"/content/_cq_graphql/site1/endpoint.json",
"/graphql/execute.json.*",
"/content/site1/.*"
],
"supportedheaders":[
"Origin",
"Accept",
"X-Requested-With",
"Content-Type",
"Access-Control-Request-Method",
"Access-Control-Request-Headers"
]
}
Site 2 is complexer en vereist geautoriseerde en mutatieverzoeken (POST, PUT, DELETE):
{
"supportscredentials":true,
"exposedheaders":[
""
],
"supportedmethods":[
"GET",
"HEAD"
"POST",
"DELETE",
"PUT"
],
"alloworigin":[
"http://127.0.0.1:3000",
"https://site2.com"
],
"maxage:Integer": 1800,
"alloworiginregexp":[
"http://localhost:.*"
"https://.*\.site2\.com"
],
"allowedpaths":[
"/content/site2/.*",
"/libs/granite/csrf/token.json",
],
"supportedheaders":[
"Origin",
"Accept",
"X-Requested-With",
"Content-Type",
"Access-Control-Request-Method",
"Access-Control-Request-Headers",
"Authorization",
"CSRF-Token"
]
}
Problemen met het in cache plaatsen van Dispatcher en configuratie dispatcher-caching-concerns-and-configuration
Vanaf Dispatcher 4.1.1+ kunnen responsheaders in cache worden geplaatst. Hierdoor is het mogelijk om CORS headers in cache te plaatsen langs de CORS -requested bronnen, zolang de aanvraag anoniem is.
Over het algemeen kunnen dezelfde overwegingen voor het in cache plaatsen van inhoud in Dispatcher worden toegepast op het in cache plaatsen van CORS-antwoordheaders bij dispatcher. In de volgende tabel wordt gedefinieerd wanneer CORS headers (en dus CORS -aanvragen) in de cache kunnen worden geplaatst.
CORS-aanvraagheaders toestaan
Om de vereiste HTTP- verzoekkopballen toe te staan om tot AEM voor verwerkingover te gaan, moeten zij in de Dispatcher /clientheaders
configuratie worden toegestaan.
/clientheaders {
...
"Origin"
"Access-Control-Request-Method"
"Access-Control-Request-Headers"
}
CORS-responsheaders in cache plaatsen
Om het in cache plaatsen en het dienen van kopballen CORS op caching inhoud toe te staan, voeg het volgende toe/cache /headers configuratieaan het AEM Publish dispatcher.any
dossier.
/publishfarm {
...
/cache {
...
# CORS HTTP response headers
# https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#the_http_response_headers
/headers {
...
"Access-Control-Allow-Origin"
"Access-Control-Expose-Headers"
"Access-Control-Max-Age"
"Access-Control-Allow-Credentials"
"Access-Control-Allow-Methods"
"Access-Control-Allow-Headers"
}
...
}
...
}
Herinner me aan opnieuw begin de toepassing van de Webserver na het aanbrengen van veranderingen in het dispatcher.any
dossier.
Het is waarschijnlijk dat het cachegeheugen volledig moet worden gewist om ervoor te zorgen dat de headers op de juiste wijze in het cachegeheugen worden opgeslagen op het volgende verzoek na een /cache/headers
configuratieupdate.
Problemen met CORS oplossen
Logboekregistratie is beschikbaar onder com.adobe.granite.cors
:
- inschakelen
DEBUG
om te zien waarom een CORS -aanvraag is afgewezen - laat
TRACE
toe om details over alle verzoeken te zien die door de manager van CORS gaan
Tips:
-
Maak handmatig XHR-verzoeken opnieuw met krullen, maar kopieer alle kopteksten en details, omdat elk verzoek een verschil kan maken. Sommige browserconsoles staan toe om de krullopdracht te kopiëren
-
Verifieer of het verzoek door de manager CORS en niet door de authentificatie, het symbolische filter CSRF, verzenders filters, of andere veiligheidslagen werd ontkend
- Als de handler CORS reageert op 200, maar de header
Access-Control-Allow-Origin
niet aanwezig is in de reactie, controleert u de logboeken op weigeringen onder DEBUG incom.adobe.granite.cors
- Als de handler CORS reageert op 200, maar de header
-
Als caching van CORS -aanvragen door dispatcher is ingeschakeld
- Controleer of de
/cache/headers
-configuratie is toegepast opdispatcher.any
en of de webserver opnieuw is gestart - Zorg ervoor dat de cache juist is gewist nadat de configuratie van OSGi of dispatcher.any is gewijzigd.
- Controleer of de
-
Controleer, indien nodig, de aanwezigheid van verificatiegegevens op het verzoek.