Аутентификация с помощью Atmosphere + Dropwizard

Привет, я ищу способ аутентифицировать пользователей, когда они подключаются к WebSocket, и просто, если они не аутентифицированы, закрывают соединение. Я использую структуру Dropwizard и атмосферу для соединений WebSocket. Вот пример, который я использую. Было бы здорово, если бы я мог использовать аннотацию @Auth, предоставленную Dropwizard, для аутентификации при установлении соединения.


person Arash    schedule 23.01.2015    source источник


Ответы (1)


Как вы это выставляете? Это через интерфейс javascript?

Вы используете подход, основанный на сервлетах, как описано в вашей ссылке и здесь: https://cvwjensen.wordpress.com/2014/08/02/websockets-in-dropwizard/, а не расширение атмосферы джерси?

Если вы используете подход на основе сервлета, рекомендуется использовать подход на основе токенов, поместив токен в заголовок http, а затем получить доступ к этому заголовку в методе обработчика @Ready, например:

@Ready
public String onReady(final AtmosphereResource resource) {
    String AuthHeader = resource.getRequest().getHeader("Authorization");

    ...DO AUTH HERE

    logger.info("Resource {} connected ", resource.uuid());
    return "Connect " + resource.uuid();
}

Затем вы также можете легко закрыть соединение, если авторизация не удалась. Однако, в зависимости от реализации на стороне клиента, вы можете подумать об этом. Если клиент автоматически переподключается при закрытии, у вас есть сценарий постоянного закрытия и открытия сокетов, что может привести к утечке ресурсов. Вы можете, если аутентификация не удалась, сохранить закрытую переменную, которая указывает, аутентифицирован ли этот экземпляр, и просто отказаться от отправки любых сообщений или обработки любых сообщений от него. Это также было бы «неясным» способом сообщить злоумышленнику, что аутентификация не удалась, она просто находится в состоянии неопределенности; подключен, но не вышел из строя или закрыт. Просто не получает никаких данных. Но опять же, это зависит от вашей реализации.

Jwt-аутентификация является опцией, проверьте это: https://github.com/ToastShaman/dropwizard-auth-jwt. Я портировал эту реализацию на dropwizard 0.8rc3-SNAPSHOT, хотя и не обнародовал ее. Если вам это нужно, дайте мне знать, и я могу опубликовать его на github.

person martin.code    schedule 09.02.2015
comment
Спасибо за ваш ответ, я добавил токен доступа в заголовок. Также, как вы сказали, перед закрытием соединения я сообщаю клиенту, почему соединение закрывается. - person Arash; 10.02.2015