Сессии в Рестлете?

Я только что реализовал свое первое приложение Restlet (наконец-то:]), и теперь у меня более важный вопрос. Я создал действительно простой ресурс под названием LoginResource, который позволяет операциям POST и GET разрешить пользователям входить в систему и проверять, вошли ли они в систему соответственно. Теперь, когда я реализовал это, и я действительно могу заставить клиента вызывать сервер, «войти в систему» ​​и видеть результат, как я могу на самом деле отслеживать, вошел ли кто-то в систему или нет?

Моему приложению необходимо следующее:

  1. Мне нужен способ, чтобы клиент изначально входил в систему и мог видеть, вошли ли они в систему через ресурс.
  2. Мне нужно предоставить "защищенный" доступ к списку объектов через другой ресурс. Это довольно просто, но это зависит от того, смогу ли я контролировать доступ, что на данный момент я не могу сделать, так как у меня нет никакого смысла активированных сеансов.

Есть ли простой способ разрешить мне включать сеансы и удерживать пользователей в течение некоторого времени? Если бы это был PHP, это был бы мой код:

// login.php: login code
$username = $_POST['username'];
$password = $_POST['password'];

if (validate($username, $password)) {
    session_start();
    $_SESSION['is_logged_in'] = "yarp";
    echo get_login_success();
} else {
    echo get_login_failure();
}

// list.php: display list of objects
if (isset($_SESSION['is_logged_in']))
    echo get_object_list();
else
    echo get_security_error();

Я ненавижу возвращать все это к PHP, но, эй, это позволяет быстро писать псевдокод.


person Naftuli Kay    schedule 16.04.2011    source источник
comment
Знаете ли вы, что вы не должны использовать сеансы в системе RESTful?   -  person Darrel Miller    schedule 16.04.2011
comment
Теперь я :-) Однако это, кажется, говорит о том, что безопасности и контролю доступа нет места в системах RESTful, что, конечно, полностью противоречит его цели.   -  person Naftuli Kay    schedule 18.04.2011
comment
Нет, это просто говорит о том, что каждый запрос должен каким-то образом повторно аутентифицироваться. Это действительно просто сводится к проблеме с производительностью. Вам нужно найти способ сделать аутентификацию быстрой.   -  person Darrel Miller    schedule 18.04.2011


Ответы (1)


Взгляните на аутентификацию HTTP Basic, HTTP Digest и HTTP OAuth (все они поддерживаются Restlet).

Для некоторых клиентов, таких как браузеры, аутентификация на основе файлов cookie по-прежнему используется в REST, но без сеанса на стороне сервера.

Проверьте эту ссылку: http://restlet.tigris.org/issues/show_bug.cgi?id=605

person Jerome Louvel    schedule 20.04.2011
comment
Чтобы добавить к ответу Джерома и комментарию Даррела, взгляните на это обсуждение, которое проливает свет на то же самое: stackoverflow.com/questions/5199554/ - person PhD; 25.04.2011