#javascript #firebase-authentication #google-cloud-functions
#javascript #firebase-аутентификация #google-cloud-функции
Вопрос:
Я хотел бы знать, работают ли сами по себе вызываемые функции с облачными функциями Firebase, например :
exports.myCallableFunction = functions.https.onCall((data, context) => {
//...
});
безопасны сами по себе или мне нужно реализовать какой-то код внутри них, чтобы убедиться, что только аутентифицированные пользователи, которые их вызывают, получают что-то от этого. Насколько я понимаю, он вызывается через конечную точку API, поэтому я немного обеспокоен тем, что все могут его вызывать.
Если необходимо реализовать какую-то логику, какая логика обеспечит ее безопасность?
Ответ №1:
Если вы хотите, чтобы только аутентифицированные пользователи могли вызывать вашу функцию, вызываемая функция сама по себе не является «безопасной» в этом отношении. Вам нужно будет добавить код, чтобы убедиться, что пользователь аутентифицирован, а затем решить, что вы хотите отправить, если это не так.
exports.myCallableFunction = functions.https.onCall((data, context) => {
if (!context.auth) {
throw new functions.https.HttpsError("unauthenticated", "You must be authenticated");
}
// continue here if they are auth'd
});
Комментарии:
1. Есть ли шанс / сроки поддержки встроенного принудительного выполнения аутентификации (вместо того, чтобы писать пользовательский код)? Поскольку в этом случае функция фактически была вызвана с неаутентифицированным запросом; какой вид не поддается настройке аутентификации в первую очередь (в отличие, скажем, от случая лямбда-аутентификации на основе AWS Cognito)
2. Я чувствую, что проверка того, что пользователь имеет право вызывать функцию до фактического вызова функции, приведет к полному sens вместо проверки каждый раз внутри самой функции
3. Вам также необходимо проверить
context.auth.uid
. Если кто-то отправляет недопустимый токен на предъявителя,auth
объект все еще присутствует, но простоundefined
Ответ №2:
Любой может вызвать вызываемую облачную функцию, но вы можете легко проверить, зарегистрирован ли пользователь (и кто он), проверив context.auth
.
Я рекомендую прочитать документацию по [вызываемым облачным функциям], которая содержит раздел, посвященный аутентификации.
Комментарии:
1. Достаточно ли просто проверить,
context.auth
существует ли, как в этом примере из документации , или нам нужно выполнить дополнительную проверку, например, проверить, чтоcontext.auth.token
это действительно и как? Это не указано в документации, и я беспокоюсь, что кто-то может просто добавить любуюcontext.auth
информацию в свой запрос, и проверка из документации выглядит так, как будто она пройдет, какие-либо комментарии по этому поводу?