Как обеспечить аутентификацию в веб-сервисах GAE (используя структуру рестлета)?

Я ищу подходящий способ аутентификации для своего GAE приложения.

Поскольку я использую структуру рестлета для своих веб-служб, я обнаружил, что файлы cookie - это хороший способ для безопасных вызовов служб. Теперь мои сомнения:

  1. Что такое «подписание файла cookie»?
  2. Где хранить значения cookie? БД или какой-нибудь статический класс?
  3. Как обеспечить шифрование файлов cookie?
  4. Что делать, если куки-файлы отключены в браузере?

Есть ли лучший механизм, чем файлы cookie?


person Vivek Mohan    schedule 10.01.2012    source источник


Ответы (1)


Если вы включите сеансы, обработка файлов cookie будет выполняться автоматически: http://code.google.com/appengine/docs/java/config/appconfig.html#Enhibited_Sessions

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

  1. Когда пользователь входит в систему, добавить некоторые данные аутентификации в их session. Эти данные могут содержать их ID и срок действия.
  2. Когда приходит запрос, посмотрите в сеансе, есть ли там эти данные и действительны ли они.
  3. Если действительно, действуйте как обычно.
  4. Если данные для авторизации недействительны или отсутствуют в сеансе, вернуть ошибку (в случае REST) ​​или перенаправить на страницу входа.

Все эти функции обычно выполняются в фильтре сервлетов. Фильтры обрабатывают запросы до и после того, как сервлеты обрабатывают запрос, поэтому они дают вам возможность перехватить запрос и выполнить некоторую обработку (например, проверку подлинности запроса).

person Peter Knego    schedule 10.01.2012
comment
Я бы не использовал концепцию сеансов, если вы разрабатываете серверное приложение RESTful. REST означает, что клиенты сохраняют состояние клиента, и поэтому сеансы на стороне сервера являются злом. Взгляните на CookieSettings в RESTLet: параметр Cookie, предоставляемый сервером. Это позволяет приложению на стороне сервера добавлять, изменять или удалять куки на клиенте. - person koma; 10.01.2012
comment
@koma Вы имеете в виду, что все клиентские данные должны будут передаваться в виде файлов cookie при каждом запросе? - person Vivek Mohan; 10.01.2012
comment
@koma: правда, запросы REST могут поступать не из браузеров, и в этом случае вам нужно будет явно обрабатывать файлы cookie сеанса в своем коде. OTOH, чем это отличается от обработки вашего собственного файла cookie? - person Peter Knego; 10.01.2012
comment
@koma: Я нашел CookieSetting RESTlet: он делает то, что браузеры делают автоматически - отправляет cookie на сервер. - person Peter Knego; 10.01.2012
comment
@Peter В структуре Restlet можно было бы начать с написания Authenticator, который проверяет учетные данные, переданные, например, БАЗОВЫЙ авт. Затем вы используете CookieSetting для последующих запросов. - person koma; 10.01.2012
comment
@vivek: данные формы отправляются с использованием строки запроса, cookie обычно используется для проверки подлинности, хотя вы должны быть осторожны с XSRF (en.wikipedia.org/wiki/Cross-site_request_forgery) - person koma; 10.01.2012