Java >> Java Tutorial >  >> Java

So verwenden Sie CORS in der NestJS-Anwendung

In diesem Beitrag werden wir darüber sprechen, wie man CORS (Cross-Origin Resource Sharing) in einer NestJS-Anwendung verwendet. Bevor wir zeigen, wie einfach es ist, CORS zu aktivieren, werden wir in diesem Beitrag einige Grundlagen behandeln.

  • Was ist CORS?
  • Was ist das NestJS-Framework?
  • Wie verwende ich CORS?

Was ist CORS?

In einer gewöhnlichen REST-API-basierten Anwendung gibt es einen Client, der die von einem Server bereitgestellte API aufruft. Beim Zugriff auf diese APIs können Clients verschiedene Ressourcen anfordern, darunter Bilder, Videos, iFrames oder Skripts. Eine Website, die Ressourcen anfordert, kann sich auf einer anderen Domäne befinden als die Domäne der Ressource. Standardmäßig kann eine Anforderung zum Abrufen von Ressourcen fehlschlagen. Hier kommt CORS ins Spiel.

Wie bereits erwähnt, steht CORS für Cross-Origin Resource Sharing. Standardmäßig macht CORS einen Aufruf vom Client zum Server sicherer. In vielen Fällen wissen wir, wer der Kunde ist und auf welcher Domäne er sein wird. In solchen Fällen möchten wir die Sicherheit für Clients lockern, die die APIs aufrufen. Wir tun dies, indem der Client die Anforderungsheader Access-Control-Allow-Origin sendet . Diese Header geben an, welche Ursprünge auf die API zugreifen können.

CORS ist ein HTTP-Header-basierter Mechanismus, der es einem Server ermöglicht, andere Ursprünge (Domäne, Schema oder Port) als seinen eigenen anzugeben, von denen ein Browser das Laden von Ressourcen zulassen sollte. – Mozilla Firefox

Sehen wir uns das folgende Diagramm an

Ein Client aus der abccompany.com sendet eine Anfrage an s3.amazon.com um auf eine Ressource von S3 zuzugreifen. In diesem Fall haben Client und Server unterschiedliche Ursprünge. Normalerweise schlägt diese Anfrage aufgrund von Cross-Origins fehl. Es ist ein Sicherheitsproblem für Browser. CORS ermöglicht den Zugriff auf eine Ressource von einem Server mit einem anderen Ursprung im Vergleich zu einer Anfrage, von der sie stammen. CORS fügt Access-Control-Allow-Origin hinzu Kopfzeilen in der Anfrage.

Was ist NestJS Framework?

NestJS ist ein Framework zum Erstellen skalierbarer serverseitiger NodeJS-Anwendungen. Im Hintergrund verwendet NestJS HTTP-Server-Frameworks wie Express.

Um loszulegen,

npm i -g @nestjs/cli

Nest bietet eine sofort einsatzbereite Anwendungsarchitektur, die es Entwicklern und Teams ermöglicht, hochgradig testbare, skalierbare, lose gekoppelte und leicht zu wartende Anwendungen zu erstellen – NestJS

Erstellen Sie ein neues Projekt mit Nest

nest new project-name .

Wie verwende ich CORS?

Um zu zeigen, wie CORS verwendet wird, erstellen wir eine nestjs-Anwendung.

nest new corsdemoapp – erstellt einen neuen Ordner für corsdemoapp .

Wenn ich jetzt npm start ausführe , wird unsere standardmäßige nestjs-Anwendung bei http://localhost:3000 gestartet .

NestJs macht dies wirklich einfacher, indem es eine Methode enableCors() bereitstellt . Dies sieht wie folgt aus:

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

Es gibt eine andere Möglichkeit, CORS zu aktivieren. Durch Übergabe von cors als Objekt in NestFactory.create() Methode.

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

Wenn wir die Antwortheader für die an http://localhost:3000 gestellte Anfrage sehen möchten , sehen sie wie folgt aus:

Der zweite Screenshot zeigt den Header Access-Control-Allow-Origin mit dem Wert * . Das bedeutet, dass Anfragen von jeder Ursprungsquelle auf den Server zugreifen können, um eine Antwort von http://localhost:3000 zu erhalten .

Welche anderen Optionen können wir für CORS hinzufügen?

Es gibt einige andere Optionen, die wir mit CORS festlegen können, während wir sie über enableCors() aktivieren . Wenn wir wissen, welche anderen Domains auf unsere API zugreifen, können wir diese Domain festlegen. Manchmal kann die API öffentlich sein. In diesem Fall können wir den Platzhalter * verwenden für Access-Control-Allow-Origin .

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

Außerdem können wir nur eine Reihe von Methoden für API-Aufrufe zulassen.

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

Der häufigste Anwendungsfall von CORS ist das Erstellen von RESTful-APIs im Backend und deren Aufruf über das Frontend.

Schlussfolgerung

Beim Erstellen und Bereitstellen von Anwendungen auf Servern ist es wichtig zu wissen, wer Ihre APIs aufruft. CORS bietet eine Sicherheitsfunktion. Das Akzeptieren einer Anfrage von jeder Domäne kann ein Sicherheitsrisiko darstellen. NestJS bietet eine einfache Möglichkeit zum Aktivieren von CORS und Optionen zum Hinzufügen von Domänen, von denen der Server die Anfrage annehmen kann. Mit CORS können wir Cross-Site-Request-Forgery-Angriffe (CSRF) vermeiden. Einige der häufigsten Exploits behandle ich in meinem Buch Simplifying Spring Security.


Java-Tag