Обеспечивают ли вызываемые функции Firebase Cloud аутентификацию конечного пользователя?

#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 информацию в свой запрос, и проверка из документации выглядит так, как будто она пройдет, какие-либо комментарии по этому поводу?