В 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