Пользовательский вход и регистрация на RESTlet + GAE / J? - PullRequest
1 голос
/ 23 марта 2011

В настоящее время я работаю над небольшим проектом с использованием RESTlet в Google App Engine / Java.

Я искал .. искал .. и не мог найти точные или понятные решения для моих сомнений.

У меня такой вопрос: как мне реализовать собственный модуль SignIn & SignUp без использования UserService или Spring Security от Google ??

Есть ли какой-нибудь фактический пример кода?

Я имею в виду, что SignUp part - это просто модуль вставки и выбора JDO. давайте просто скажем, что я сделал это.

Как я должен обрабатывать сеанс запросов каждого пользователя и аутентификацию ??

Я думаю об использовании HTTPS при каждом запросе.

Буду очень признателен за любые предложения или помощь!

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

В Restlet у вас есть поддержка безопасности на стороне клиента и сервера.На стороне клиента вы можете указать подсказки безопасности, используя сущность ChallengeResponse.Эта функция открыта, и вы можете указать тип аутентификации, который вы хотите.В следующем коде я использую базовую аутентификацию http на основе имени пользователя / пароля:

ClientResource cr = new ClientResource(uri);
ChallengeScheme scheme = ChallengeScheme.HTTP_BASIC; 
ChallengeResponse authentication = new ChallengeResponse(
                          scheme, "username", "password"); 
cr.setChallengeResponse(authentication);

Restlet автоматически создаст необходимые заголовки в соответствующем запросе.Вы можете заметить, что Restlet поддерживает широкий спектр типов аутентификации через свои расширения.Я знаю, что в настоящее время проделана определенная работа по поддержке OAuth v2 (см. http://wiki.restlet.org/developers/172-restlet/257-restlet/310-restlet.html).

. На стороне сервера вам необходимо защитить доступ на уровне маршрутизации с помощью объекта ChallengeAuthenticator, как описано ниже. Это может бытьсделано в вашем приложении Restlet:

public Restlet createInboundRoot() {
    Router router = new Router(getContext());

    ChallengeAuthenticator guard = new ChallengeAuthenticator(getContext(),
                                         ChallengeScheme.HTTP_BASIC, "realm");
    guard.setVerifier(verifier);
    guard.setEnroler(enroler);

    guard.setNext(router);
    return guard;
}

Как и на стороне клиента, эта поддержка является общей и основана на двух интерфейсах, которые необходимо указать на страже:

  • Верификатородин для проверки успешности аутентификации
  • Один из регистраторов для заполнения ролей для аутентифицированного пользователя

Вы можете заметить, что с обеих сторон должны использоваться одни и те же технологии безопасности ...

Если вы хотите управлять сеансом аутентификации для пользователя, вам необходимо реализовать его самостоятельно с помощью файлов cookie.

Когда аутентификация проходит успешно на стороне сервера, вы можете вернуть файл cookie, содержащий маркер безопасности, который позволяет вампроверка пользователя из вашей базы данных (например) .Некоторый код, подобный приведенному ниже, может реализовать это:

CookieSetting cookie = new CookieSetting(0,
                 SECURITY_COOKIE_NAME, securityToken);
Series<CookieSetting> cookieSettings = response.getCookieSettings();
cookieSettings.clear();
cookieSettings.add(cookie);

Например, вы можете расширить класс SecretVerifier Restlet, чтобы добавить тест для полученных данных безопасности и добавить этот код при получении файла cookie безопасности.

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

ClientResource clientResource = (...)
(...)
Cookie securityCookie = new Cookie(0,
             SECURITY_COOKIE_NAME, securityToken);
clientResource.getRequest().getCookies().clear();
clientResource.getRequest().getCookies().add(securityCookie);

Надеюсь, это поможет вам!Thierry

0 голосов
/ 23 марта 2011

Если вы заинтересованы в повторном использовании социальных учетных записей, вам необходимо интегрироваться с каждой из них, например facebook oauth

и / или использовать проверку подлинности ядра приложения через OpenID

Оба способа определяют API для аутентификации клиента, вы можете использовать UserService или управлять своим собственным состоянием через куки.

...