У меня есть веб-сайт, работающий на www.mywebsite.com. Файлы хранятся в корзине S3 в сочетании с cloudFront. Недавно я добавил на сайт новую часть, которая должна быть предназначена только для личного доступа, поэтому я хотел установить некоторую форму защиты. Однако остальная часть сайта должна оставаться опубликованной c. Моя цель - сделать сайт доступным для всех, но как только кто-то перейдет к новой части, он не должен видеть никаких исходных файлов, и ему будет предложено ввести комбинацию имени пользователя и пароля.
URL новой детали будет, например, www.mywebsite.com/private/index.html, ...
Я обнаружил, что AWS лямбда-функция (с node.js) хороша для этого, и это вроде работает. Мне удалось аутентифицировать все на всем сайте, но я не могу понять, как заставить его работать только на тех страницах, которые содержат, например, «/ private / *» в полном имени URL. Лямбда-функция, которую я написал, выглядит следующим образом:
'use strict';
exports.handler = (event, context, callback) => {
// Get request and request headers
const request = event.Records[0].cf.request;
const headers = request.headers;
if (!request.uri.toLowerCase().indexOf("/private/") > -1) {
// Continue request processing if authentication passed
callback(null, request);
return;
}
// Configure authentication
const authUser = 'USER';
const authPass = 'PASS';
// Construct the Basic Auth string
const authString = 'Basic ' + new Buffer(authUser + ':' + authPass).toString('base64');
// Require Basic authentication
if (typeof headers.authorization == 'undefined' || headers.authorization[0].value != authString) {
const body = 'Unauthorized';
const response = {
status: '401',
statusDescription: 'Unauthorized',
body: body,
headers: {
'www-authenticate': [{key: 'WWW-Authenticate', value:'Basic'}]
},
};
callback(null, response);
}
// Continue request processing if authentication passed
callback(null, request);
};
Не работает следующая часть:
if (!request.uri.toLowerCase().indexOf("/private/") > -1) {
// Continue request processing if authentication passed
callback(null, request);
return;
}
Я предполагаю, что request.uri не содержит что я ожидал, что он будет содержать, но я не могу понять, что содержит то, что мне нужно.