Saya memiliki backend Node.js menggunakan express yang hanya mengizinkan permintaan yang datang dari asal tertentu (sebut saja localhost:8998). Saya ingin membuat API publik untuk backend, namun, diotorisasi dengan token, bukan oleh Origin.

Apakah mungkin untuk membuat rute semacam ini?

Saya sedang berpikir untuk melakukan ini dengan menyetel header Access-Control-Allow-Origin ke apa pun asal permintaan ketika rute permintaan adalah salah satu rute API publik. Sesuatu seperti ini:

app.use(function(req, res, next) {
    var origin = req.get('origin');
    res.header("Access-Control-Allow-Origin", origin);
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

Sepertinya saya menentang niat asli dari header Access-Control-Allow-Origin. Ingin mendengar pendapat kalian tentang ini/bagaimana saya harus menerapkan API publik.

1
Isaac Grynsztein 18 Maret 2020, 06:52

1 menjawab

Jawaban Terbaik

Buat middleware:

const allowCORS = function(req, res, next) {
    var origin = req.get('origin');
    res.header("Access-Control-Allow-Origin", origin);
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
};

const allowAllIfAuthorized = function(req, res, next) {
  if (req.isAuthorized) {
    return allowAll(req, res, next);
  } 
  next();
};

const allowedTokens = [...];
const isAuthorized = function(req, res, next) {
  req.isAuthorized = (
    req.query.accessToken 
    && allowedTokens.includes(req.query.accessToken)
  );
  next();
}

Dan lampirkan di rute tertentu:

app.get('/', (req, res) => res.render('index'));

app.use(
  '/api', 
  allowCORS, // allow cors for public api
  require('./api'));

app.use(
  '/private/api', 
  isAuthorized, allowCORSIfAuthorized, // allow cors if user authorized
  require('./private/api'));

Saya ingin membuat API publik untuk backend, namun, diotorisasi dengan token, bukan oleh Origin.

Jadi itu harus menjadi aturan semua di mana-mana, Anda mencegah akses pribadi menggunakan token akses yang akan dimiliki pengguna yang berwenang.

Ringkasan: CORS bukan firewall (penjaga gerbang) dari pengguna yang tidak sah

1
num8er 18 Maret 2020, 04:08