🍬 a) Autoriser des origines pour une API
Autorisation d'origines & les CORS
A cette partie-ci, nous allons voir comment mettre à jour une API afin que dans chaque réponse faite à un client, on ajoute un header permettant d'autoriser une ou plusieurs origines.
C'est un moyen de relâcher la sécurité d'une API tout en restant vigilant sur les origines autorisées.
Pour ce nouveau tutoriel, nous allons partir de la dernière version de la RESTful API de pizzas.
Veuillez créer un nouveau projet nommé /web2/tutorials/back/api/cors
sur base d'un copié collé de services.
Dans ce projet, veuillez installer le package cors
et les types associés :
bashnpm i corsnpm i @types/cors -D
Nous allons configurer les headers de la RESTful API à l'aide du middleware cors
offert par la librairie cors
.
Pour configurer et utiliser les CORS, veuillez mettre à jour le fichier /app.ts
:
ts1import express, { ErrorRequestHandler } from "express";2import cors from "cors";34import usersRouter from "./routes/users";5import pizzaRouter from "./routes/pizzas";6import drinkRouter from "./routes/drinks";78const app = express();910const corsOptions = {11origin: [/^http:\/\/localhost/, "http://amazing.you.com"],12};1314app.use(cors(corsOptions));1516app.use((_req, _res, next) => {17console.log(18"Time:",19new Date().toLocaleString("fr-FR", { timeZone: "Europe/Brussels" })20);21next();22});2324app.use(express.json());25app.use(express.urlencoded({ extended: false }));2627app.use("/users", usersRouter);28app.use("/pizzas", pizzaRouter);29app.use("/drinks", drinkRouter);3031const errorHandler: ErrorRequestHandler = (err, _req, res, _next) => {32console.error(err.stack);33return res.status(500).send("Something broke!");34};3536app.use(errorHandler);37export default app;
Via /^http:\/\/localhost/
, nous précisons que l'API doit autoriser toutes les origines locales (REGEX qui accepte toutes les URL qui commencent par http://localhost
).
Il reste à s'assurer que votre frontend (/web2/tutorials/pizzeria/front/fetch-no-proxy
) est lui aussi bien démarré et peut réaliser ses "fetch" vers l'API.
Tout fonctionne correctement ?
Normalement oui, vous devriez avoir le site de la pizzeria qui affiche le menu des pizzas suite à un appel à l'API.
En cas de souci, vous pouvez accéder au code du tutoriel ici :
- pour l'API : cors.
- pour le frontend : fetch-no-proxy.
💭 OK, ça fonctionne bien... Mais cela est possible seulement si nous sommes les propriétaires de la RESTful API. Maintenant, que faire si une API tierce doit être intégrée dans notre frontend ?
Imaginez que vous souhaitez intégrer une opération d'une API offerte par Google...
Pensez-vous que vous pouvez leur donner un coup de fil et dire : "Google, peux-tu STP autoriser l'origine associée à mon site web ?"...
Il y a une solution pour cela : le proxy qui est vu ailleurs dans ce cours.