Привет, я ищу способ аутентифицировать пользователей, когда они подключаются к WebSocket, и просто, если они не аутентифицированы, закрывают соединение. Я использую структуру Dropwizard и атмосферу для соединений WebSocket. Вот пример, который я использую. Было бы здорово, если бы я мог использовать аннотацию @Auth, предоставленную Dropwizard, для аутентификации при установлении соединения.
Аутентификация с помощью Atmosphere + Dropwizard
Ответы (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.