#azure-functions #passport.js
#azure-функции #passport.js
Вопрос:
Как я могу защитить функцию Azure с помощью passport
и passport-azure-ad
я не хочу защищать все функции Azure, для некоторых функций потребуется проверка access_token перед запуском кода. И большинство примеров, которые я нашел в Интернете, используют express, который нельзя использовать в функциях Azure.
Я попробовал приведенный ниже подход, но код по-прежнему выполнялся без аутентификации.
const passport = require("passport");
const config = require("../shared/config");
const createMongoClient = require("../shared/mongo");
const BearerStrategy = require("passport-azure-ad").BearerStrategy;
const bearerStrategy = new BearerStrategy(config, function (token, done) {
// Send user info using the second argument
done(null, {}, token);
});
passport.use(bearerStrategy);
passport.initialize();
module.exports = async function (context, req) {
passport.authenticate("oauth-bearer", { session: false });
const dish = req.body || {};
if (dish) {
context.res = {
status: 400,
body: "Dish data is required! ",
};
}
const { db, connection } = await createMongoClient();
const Dishes = db.collection("dishes");
try {
const dishes = await Dishes.insertOne(dish);
connection.close();
context.res = {
status: 201,
body: dishes.ops[0],
};
} catch (error) {
context.res = {
status: 500,
body: "Error creating a new Dish",
};
}
};
Ответ №1:
Поскольку функции Azure не управляются вами (вы только предоставляете код), аутентификация выполняется в другом месте и может быть настроена через портал.
Если требуется защита только некоторых функций, лучшим решением было бы разделить функции на два разных функциональных приложения. Один будет защищен, а другой — нет.
Вот официальная документация для аутентификации:https://learn.microsoft.com/en-us/azure/app-service/overview-authentication-authorization
Из того, что я видел, аутентификация не включена при использовании Linux в качестве операционной системы, поэтому ваше развертывание должно быть в Windows, или вы могли бы использовать Azure API Management.
У меня есть пример, который создает функцию Azure с аутентификацией на портале. Сам код написан на .Net но конфигурация на портале должна быть точно такой же.
https://www.pshul.com/2020/02/07/azure-ad-authentication-from-angular-to-azure-functions/
Комментарии:
1. Спасибо, но я хочу аутентифицировать токен перед запуском функции Azure
2. Да, я понимаю. Защита вашей функции таким образом не приведет к запуску функции, если отправленный токен действительно действителен. Он остановится еще до того, как достигнет вашего кода.
Ответ №2:
Может быть, вы можете использовать Azure следующим образом:https://www.npmjs.com/package/azure-function-express
Также здесь есть полный пример с тем же подходом:
https://github.com/Azure-Samples/ms-identity-nodejs-webapi-onbehalfof-azurefunctions