Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Node.js – Cors Paketiyle ‘Access-Control-Allow-Origin’ Güvenlik Yönetimi

Merhaba,

Node.js temelli geliştirilen bir sunucunun API’larını kullanabilmek için varsayılan ‘Access-Control-Allow-Origin’ güvenliğini aşabilmemiz gerekmektedir. Sunucu tarafından hangi adreslerin API’lara erişebileceğini ayarlamalı ve bu doğrultuda erişim politikalarını belirlemeliyiz.

Cors ayarlaması yapılmayan bir sunucuya yapılan talep neticesinde güvenlik gereği doğal refleks devreye girecek ve aşağıdaki hata mesajı fırlatılacaktır.

Access to XMLHttpRequest at ‘http://localhost:5000/xyz’ from origin ‘http://xyz.com’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

İlgili hatadan kurtulabilmek ve sunucunun API’larını sıkıntısız kullanabilmek için özel olarak tasarlanan cors middleware’ını kullanabiliriz.

npm install cors --save

Paketi sunucuya install ettikten sonra aşağıdaki gibi middleware olarak uygulamaya eklememiz, dışarıdan herhangi bir adres üzerinden gelecek tüm talepler için güvenliğin kaldırıldığı anlamına gelmekte ve sıkıntısız bir şekilde gelen tüm taleplerin işleneceği belirtilmektedir.

//Modul Variables
const express = require("express");
const app = express();
var cors = require("cors")

app.use(cors());

//Router Variables
const employeeRouter = require("./routers/employeeRouter");
const tokenRouter = require("./routers/tokenRouter");
const userRouter = require("./routers/userRouter");
const orderRouter = require("./routers/orderRouter");

//Routers
app.use("/", employeeRouter);
app.use("/token", tokenRouter);
app.use("/user", userRouter);
app.use("/order", orderRouter);

app.listen(5000, () => console.log("Yayın başladı..."));

Ayriyetten aşağıdaki gibi bir kullanım ile de belli bir route’a özel cors ayarlaması yapılabilmektedir.

//Modul Variables
const express = require("express");
const app = express();
var cors = require("cors")

app.get("/page1", cors(), (request, response, next) => {
     response.json("...");
});

app.get("/page2", (request, response, next) => {
     response.json("...");
});
.
.
.

Sunucu API’larını kullanacak kaynak adresi direkt olarak konfigure edebilmek için aşağıdaki gibi işlem uygulayabiliriz.

//Modul Variables
const express = require("express");
const app = express();
var cors = require("cors")

var corsOptions = {
     origin: 'http://localhost:4200',
     optionsSuccessStatus: 200
}

app.get("/page1", cors(corsOptions), (request, response, next) => {
     response.json("...");
});
.
.
.

Burada “/page1” route’unu, sade ve sadece “http://localhost:4200” adresinden gelecek talepler neticesinde tetikleyecektir. Bu adres dışındaki tüm talepler ‘Access-Control-Allow-Origin’ hatasıyla karşılaşacaktır.

Eğer ki, birden fazla adresi konfigure etmek istiyorsanız aşağıdaki gibi bir whitelist tanımlaması üzerinden işlemlerinizi gerçekleştirebilirsiniz.

//Modul Variables
const express = require("express");
const app = express();
var cors = require("cors")

var whitelist = ['http://localhost:4200', 'http://localhost:4201']
var corsOptions = {
     origin: (origin, callback) => {
          if (whitelist.indexOf(origin) !== -1)
               callback(null, true);
          else
               callback(new Error("! ! !"));
     }
}

app.get("/page1", cors(corsOptions), (request, response, next) => {
     response.json("...");
});
.
.
.

Evet, gördüğünüz üzere “cors” paketi sayesinde Node.js serverlarındaki ‘Access-Control-Allow-Origin’ hatasından kurtulunabilmekte ve belirlenen adreslere API erişim konfigürasyonu sağlanabilmektedir.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…

İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir