Авторизация облачной функции против validationHandler

Обнаружил, что открыл пару функций для доступа к пользователям с недействительными токенами сеанса. Единственный способ сделать это — перехватить запрос с помощью bodyParser до того, как Parse получит запрос, и удалить sessionToken из запроса.

Теперь пытаюсь лучше управлять авторизацией для всех функций. Мой вопрос:

  1. могу ли я ослабить требование о том, что если sessionToken включен, он должен быть действительным каким-либо другим образом? Выполняется ли проверка токена сеанса с помощью стандартного validationHandler, который можно заменить, или это делается где-то еще?

  2. для управления доступом к облачным функциям, есть ли что-то вроде ролей ACL? принимает ли «validationHandler» облачной функции только параметр? или я могу также проверить объект пользователя?


person Ron Bresler    schedule 06.08.2016    source источник


Ответы (1)


  1. Да. В parse-server вы можете убедиться, что сеансы действительны, потому что, если вы попытаетесь запустить любую операцию CRUD с недействительным сеансом, вы получите ошибку http 403 о том, что ваш сеанс недействителен или истек. Вы можете контролировать «Длительность» своего сеанса, изменив свойство sessionLength в своем приложении сервера синтаксического анализа. По умолчанию 1 год

  2. Нет контроля доступа к облачным функциям, но вы можете проверить, запускает ли вошедший в систему пользователь эту функцию, проверив, не является ли значение request.user неопределенным. Облачные функции могут получать только параметры в парах ключ-значение, и эти параметры не могут быть объектами анализа. если вы хотите отправить ParseObject, вы можете отправить objectId объекта анализа, а затем запросить его в облачном коде, чтобы получить полный объект. Вы всегда можете получить доступ к контексту пользователя в request.user (только если облачный код был запущен пользователем). Если вы все еще хотите «защитить» свой облачный код, вы можете проверить, есть ли у вызывающего пользователя роль, запросив базу данных ролей и проверить, содержится ли там пользователь.

person Ran Hassid    schedule 06.08.2016
comment
Спасибо, Ран. Может быть, мне следует быть более ясным - 1) я на самом деле спрашивал, есть ли способ разрешить недействительным токенам доступ к моей функции облачного кода. Причина, по которой я спрашиваю об этом, заключается в том, что некоторые функции бесплатны для неавторизованных пользователей. Однако, если у пользователя есть устаревшая сессия в его запросе, ему будет отказано. Обходной путь, который я нашел для этого, заключается в перехвате запроса до того, как сервер синтаксического анализа его получит, и удалении любого токена сеанса, если он был передан этим общедоступным запросам. только тогда я могу гарантировать, что синтаксический анализ будет обрабатывать запросы. Но я надеялся, что есть лучший способ. - person Ron Bresler; 08.08.2016
comment
2) Есть некоторые правила доступа, которые мне нужно обеспечить - я не полагаюсь только на ACL для авторизации. Поэтому мне нужен другой механизм авторизации. Но validationHandler получает только параметры, а не request.user. Что мне нужно, так это запустить общий код, чтобы сопоставить параметры каждого запроса с привилегиями пользователя. Поэтому мне нужно что-то похожее на validationHandler, только имеющее доступ к объекту пользователя. Опять же, я, вероятно, могу сделать это, обернув каждый обработчик функции функцией обработчика проверки авторизации, но если вместо этого я смогу зарегистрировать функции проверки авторизации, это будет лучше. - person Ron Bresler; 09.08.2016
comment
Вы можете отправить идентификатор объекта пользователя от клиента, а затем прочитать его в облачном коде? - person Ran Hassid; 09.08.2016
comment
Я могу это сделать, но тогда это не аутентифицируется. Я должен получить доступ к объекту request.user, чтобы он имел какое-либо значение с точки зрения аутентификации. В противном случае любой может создать пользователя в моем приложении и использовать его для вызова функций, которые обращаются к другим пользователям. - person Ron Bresler; 09.08.2016