Cross-Origin Resource Sharing (CORS)
Förstå CORS-policyer i samband med OAuth2 och OIDC, särskilt för single-page-applikationer som får åtkomst till skyddade resurser.
Cross-Origin Resource Sharing (CORS) är en gratis lektion i OAuth2 och OpenID Connect på djupet på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för OAuth2 och OpenID Connect på djupet, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i OAuth2 och OpenID Connect på djupet innehåller totalt 4 lektioner.
CORS och säkra webbappar
Välkommen! I dag ska vi utforska Cross-Origin Resource Sharing (CORS), en viktig säkerhetsfunktion för moderna webbapplikationer.
CORS gör det möjligt för webbläsare att hantera förfrågningar säkert mellan en klientapplikation (som en Single-Page Application, SPA) och en API-server när de ligger på olika domäner.
Detta är särskilt viktigt när din SPA använder OAuth2 eller OpenID Connect för att få åtkomst till skyddade resurser.
Same-Origin Policy
För att förstå CORS behöver vi först känna till Same-Origin Policy (SOP).
- SOP är en grundläggande säkerhetsfunktion i webbläsare.
- Den hindrar webbsidor från att skicka förfrågningar till en annan domän än den som levererade sidan.
- Exempelvis kan ett skript från
app.example.cominte direkt skicka en AJAX-förfrågan tillapi.anothersite.com.
Detta skyddar användare mot skadliga skript som försöker stjäla data från andra webbplatser där användaren är inloggad.
Varför CORS behövs
Även om SOP är bra för säkerheten skapar den problem för moderna webbarkitekturer.
Många applikationer, särskilt SPA:er, behöver hämta data från API:er som finns på en annan domän eller port. Exempelvis:
- Din SPA finns på
https://my-app.com - Ditt API finns på
https://api.my-app.com - Din OAuth2 Authorization Server finns på
https://auth.my-app.com
CORS ger ett kontrollerat sätt att lätta på SOP och tillåta dessa förfrågningar mellan olika ursprung, samtidigt som säkerheten bevaras.
Enkla CORS-förfrågningar
Vissa förfrågningar mellan olika ursprung betraktas som ”enkla” av webbläsare. De utlöser ingen särskild preflight-kontroll.
En förfrågan är enkel om den uppfyller alla dessa villkor:
- Metoden är
GET,HEADellerPOST. - Endast särskilt tillåtna headers används (till exempel
Accept,Accept-Language,Content-Language,Content-Type). - Headern
Content-Typeär begränsad tillapplication/x-www-form-urlencoded,multipart/form-dataellertext/plain.
Om förfrågan är enkel skickar webbläsaren den direkt, och servern inkluderar CORS-headers i svaret.
Preflight för komplexa förfrågningar
De flesta förfrågningar i moderna SPA:er, särskilt sådana som innehåller OAuth2-token, är inte enkla.
En ”komplex” förfrågan kräver att webbläsaren skickar en ”preflight”-förfrågan med OPTIONS innan den faktiska förfrågan:
- Metoder:
PUT,DELETEeller anpassade metoder. - Headers: Anpassade headers (till exempel
Authorizationför åtkomsttoken). - Content-Type:
application/json(vanligt för API:er).
Servern måste svara på denna OPTIONS-förfrågan med lämpliga CORS-headers och ange om den faktiska förfrågan är tillåten.
Viktiga CORS-headers i svar
Servern kommunicerar sin CORS-policy genom särskilda HTTP-headers i svaret:
Access-Control-Allow-Origin:Anger vilka ursprung som får komma åt resursen. Kan vara*(jokertecken, vilket i allmänhet avråds från av säkerhetsskäl) eller ett specifikt ursprung somhttps://my-app.com.Access-Control-Allow-Methods:Anger vilka HTTP-metoder (till exempelGET, POST, PUT, DELETE) som är tillåtna för resursen.Access-Control-Allow-Headers:Anger vilka HTTP-headers (till exempelAuthorization, Content-Type) som får användas i den faktiska förfrågan.
Dessa headers är avgörande för att webbläsaren ska tillåta förfrågan mellan olika ursprung.
CORS och credentials
Headern Access-Control-Allow-Credentials är ytterligare en viktig CORS-header.
När den är satt till true anger den för webbläsaren att servern tillåter att cookies, HTTP-autentisering eller SSL-klientcertifikat inkluderas i förfrågan mellan olika ursprung.
I OAuth2/OIDC skickas åtkomsttoken vanligtvis i headern Authorization, inte som cookies. Om ni däremot använder sessionscookies för autentisering eller identitetshantering tillsammans med token blir denna header relevant.
CORS i OAuth2/OIDC-flöden
CORS är viktigt på flera ställen i OAuth2/OIDC:
- Tokenutbyte: Din SPA kan behöva byta en auktoriseringskod mot en åtkomsttoken vid Authorization Servers token-endpoint. Detta är en
POST-förfrågan mellan olika ursprung. - API-åtkomst: När din SPA har en åtkomsttoken använder den den för att anropa ett Resource Servers API (till exempel
GET /userinfo,POST /orders). Även detta är en förfrågan mellan olika ursprung.
Authorization Server och Resource Server måste konfigureras korrekt för att tillåta dessa förfrågningar från din SPAs ursprung.
Bästa praxis för CORS
Följ dessa riktlinjer för säkra OAuth2/OIDC-implementationer med CORS:
- Specifika ursprung: Ange alltid exakta ursprung (till exempel
https://my-app.com) iAccess-Control-Allow-Origin. Använd aldrig*i produktion. - Begränsa metoder och headers: Tillåt endast de HTTP-metoder och headers som klientapplikationerna faktiskt behöver.
- Konfigurera servrar: Säkerställ att Authorization Server och Resource Server är korrekt konfigurerade för att skicka nödvändiga CORS-headers.
- Hantera preflight: Se till att servern kan svara på
OPTIONS-förfrågningar för preflight-kontroller.
Felkonfigurerad CORS kan leda till säkerhetsbrister och möjliggöra obehörig åtkomst.
Kontroll av CORS-konfiguration
Din SPA på https://my-app.com behöver skicka en POST-förfrågan med headern Authorization och Content-Type: application/json till ditt API på https://api.my-app.com/data. Vilka CORS-headers ska API-servern inkludera i svaret för att tillåta detta?
Sammanfattning: CORS och säkerhet
Ni har lärt er om Cross-Origin Resource Sharing (CORS) och dess viktiga roll för att säkra moderna webbapplikationer, särskilt sådana som använder OAuth2 och OpenID Connect.
- CORS lättar på webbläsarens Same-Origin Policy.
- Det möjliggör säker kommunikation mellan olika ursprung.
- Preflight-förfrågningar för ”komplexa” API-anrop är vanliga när OAuth2-token används.
- Korrekt konfiguration på serversidan av CORS-headers (
Access-Control-Allow-Origin,Access-Control-Allow-Methods,Access-Control-Allow-Headers) är avgörande.
Följ alltid bästa praxis för att förhindra felkonfigurationer som kan exponera era skyddade resurser.
Lär dig OAuth2 och OpenID Connect på djupet med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Cross-Origin Resource Sharing (CORS)” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen OAuth2 och OpenID Connect på djupet, inklusive ”Cross-Origin Resource Sharing (CORS)”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i OAuth2 och OpenID Connect på djupet innehåller totalt 4 lektioner.
Vad lär jag mig i ”Cross-Origin Resource Sharing (CORS)”?
Förstå CORS-policyer i samband med OAuth2 och OIDC, särskilt för single-page-applikationer som får åtkomst till skyddade resurser. Ni övar på OAuth2 och OpenID Connect på djupet med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig OAuth2 och OpenID Connect på djupet?
Du behöver inga förkunskaper. Utbildningen i OAuth2 och OpenID Connect på djupet på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Cross-Origin Resource Sharing (CORS)”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här OAuth2 och OpenID Connect på djupet-lektionen?
Ja. Varje OAuth2 och OpenID Connect på djupet-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Samtycke och användarupplevelse
- Cross-Origin Resource Sharing (CORS)
- Utloggning via front channel och back channel
- Tokens bundna till avsändaren med mTLS