Java >> Java tutorial >  >> Java

Sådan bruges CORS i NestJS-applikationen

I dette indlæg vil vi tale om, hvordan man bruger CORS (Cross-Origin Resource Sharing) i en NestJS-applikation. Før vi viser, hvor nemt det er at aktivere CORS, vil vi dække nogle grundlæggende elementer i dette indlæg.

  • Hvad er CORS?
  • Hvad er NestJS-rammen?
  • Hvordan bruger man CORS?

Hvad er CORS?

I en sædvanlig REST API-baseret applikation er der en klient, der kalder API'et, der betjenes af en server. Når de tilgår disse API'er, kan klienter anmode om forskellige ressourcer, og dette inkluderer billeder, videoer, iframes eller scripts. Et websted, der anmoder om ressourcer, kan være på et andet domæne sammenlignet med ressourcens domæne. Som standard kan en anmodning om at hente ressourcer mislykkes. Det er her, CORS kommer ind i billedet.

Som tidligere nævnt står CORS for Cross-Origin Resource Sharing. Som standard gør CORS et opkald fra klient til server mere sikkert. I mange tilfælde er vi klar over, hvem klienten er, og hvilket domæne den skal ligge på. I sådanne tilfælde ønsker vi at slække på sikkerheden for kunder, der kalder API'erne. Det gør vi ved at klienten sender anmodningsoverskrifter Access-Control-Allow-Origin . Disse overskrifter angiver, hvilke oprindelser der kan få adgang til API'en.

CORS er en HTTP-header-baseret mekanisme, der tillader en server at angive enhver oprindelse (domæne, skema eller port) bortset fra sin egen, hvorfra en browser skal tillade indlæsning af ressourcer. – Mozilla Firefox

Lad os se på følgende diagram

En klient fra abccompany.com sender en anmodning til s3.amazon.com for at få adgang til en ressource fra S3. I dette tilfælde har klienten og serveren forskellig oprindelse. Normalt vil denne anmodning mislykkes på grund af krydsoprindelse. Det er et sikkerhedsproblem for browsere. CORS giver mulighed for at få adgang til en ressource fra en server med en anden oprindelse sammenlignet med en anmodning, der stammer fra. CORS tilføjer Access-Control-Allow-Origin overskrifter i anmodningen.

Hvad er NestJS Framework?

NestJS er en ramme til at bygge skalerbare NodeJS server-side applikationer. I baggrunden bruger NestJS HTTP-serverframeworks som Express.

For at komme i gang,

npm i -g @nestjs/cli

Nest leverer en klar applikationsarkitektur, som giver udviklere og teams mulighed for at skabe meget testbare, skalerbare, løst koblede og let vedligeholdelige applikationer – NestJS

Opret et nyt projekt med Nest

nest new project-name .

Hvordan bruger man CORS?

For at vise, hvordan man bruger CORS, vil vi oprette en nestjs-applikation.

nest new corsdemoapp – vil oprette en ny mappe til corsdemoapp .

Hvis jeg nu kører npm start , vil den starte vores standard nestjs-applikation på http://localhost:3000 .

NestJs gør dette virkelig nemmere ved at levere en metode enableCors() . Dette vil se ud som nedenfor:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors();
  await app.listen(3000);
}
bootstrap();

Der er en anden måde at aktivere CORS på. Ved at overføre cors som et objekt i NestFactory.create() metode.

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    cors: true,
  });
  await app.listen(3000);
}
bootstrap();

Hvis vi ønsker at se svaroverskrifterne for anmodningen til http://localhost:3000 , vil de se ud som nedenfor:

Det andet skærmbillede viser overskriften Access-Control-Allow-Origin med værdien * . Det betyder, at anmodninger fra enhver oprindelseskilde kan få adgang til serveren for at få svar fra http://localhost:3000 .

Hvad er de andre muligheder, vi kan tilføje for CORS?

Der er et par andre muligheder, som vi kan indstille med CORS, mens vi aktiverer gennem enableCors() . Hvis vi ved, hvilke andre domæner der får adgang til vores API, kan vi indstille det domæne. Nogle gange kan API'en være offentlig. I så fald kan vi bruge jokertegnet * for Access-Control-Allow-Origin .

app.enableCors(
    { 
      origin: ['https://betterjavacode.com', 'https://www.google.com'],
    }
  );

Desuden kan vi kun tillade et sæt metoder til API-kald.

app.enableCors(
    { 
      origin: ['https://betterjavacode.com', 'https://www.google.com'],
      methods: ['POST', 'PUT', 'DELETE', 'GET']
    }
  );

Det mest almindelige anvendelsestilfælde af CORS er, når man bygger RESTful APIS i backend og kalder dem gennem frontend.

Konklusion

Når du bygger og implementerer applikationer på servere, er det vigtigt at vide, hvem der kalder dine API'er. CORS giver en sikkerhedsfunktion. At acceptere en anmodning fra hvert domæne kan udgøre en sikkerhedsrisiko. NestJS giver en enkel måde at aktivere CORS og muligheder for at tilføje domæner, hvorfra serveren kan acceptere anmodningen. CORS giver os mulighed for at undgå cross-site request forgery attacks (CSRF). Jeg dækker nogle af de almindelige bedrifter i min bog Simplifying Spring Security.


Java tag