Подтвердить что ты не робот

Как использовать Basic HTTP Auth с веб-сервисом REST (Java + Jersey)?

Я новичок в REST webservice и только что создал свой первый веб-сервис.
В моем сервисе пользователь может создать профиль через простую форму, дающую свое имя пользователя и пароль.

Теперь, как проверить учетные данные пользователя, когда пользователь входит в систему?
Я имею в виду, что у меня простая форма, которая проверяет, что пользователь вошел в систему, но как проверить пользователя, когда он должен выполнять различные операции с профилем add/update/delete?

Например:
В FB вы регистрируетесь и в нем хранится файл cookie, который имеет ваши учетные данные, и когда вы выполняете такие операции, как "Состояние сообщения", сообщение друг... и т.д.... он больше не запрашивает ваши учетные данные, потому что у него есть файл cookie в котором находятся ваши учетные данные, и он просто использует этот файл cookie...

Но в REST мы не используем cookie, поэтому следующий вариант - HTTP-заголовки. И я хочу знать, как отправлять и получать учетные данные пользователя через HTTP-заголовок .i.e
Basic HTTP Auth

4b9b3361

Ответ 1

Клиентская сторона

Чтобы отправить учетные данные в API, вы используете заголовок HTTP Authorization, указав учетные данные в форме Basic username:password. Имя пользователя: пароль Строка должна быть закодирована с использованием схемы кодирования Base64. Таким образом, заголовок примера может выглядеть примерно так:

Authorization: Basic d2lraTpwZWRpYQ==

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

Сторона сервера

Чтобы проверить учетные данные внутри службы REST в Джерси, вам нужно поймать и перехватить все входящие запросы. Для этого Джерси предоставляет концепцию ContainerRequestFilters. Например, если вы используете Tomcat, вы можете добавить фильтры этого типа внутри вашего определения сервлета в ваш web.xml следующим образом:

<init-param>
    <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
    <param-value>your.package.BasicAuthFilter</param-value>
</init-param>

Называемый класс BasicAuthFilter должен реализовать интерфейс Jerseys ContainerRequestFilter и переопределить метод public ContainerRequest filter(ContainerRequest request). Внутри метода вы в основном выполните следующее:

  • выборки учетных данных, основанных на Base64, из заголовка авторизации запроса
  • декодировать их (т.е. используя javax.xml.bind.DatatypeConverter.parseBase64Binary())
  • используйте UserDao (или другой поставщик данных), чтобы проверить правильность учетных данных.
  • вернуть код состояния 401 Unauthorized, если проверка не выполнена (т.е. throw new WebApplicationException(Status.UNAUTHORIZED))
  • если учетные данные действительны, просто верните запрос, чтобы делегировать его ресурсу Джерси, ответственному за его обработку.

Вы можете найти очень хороший пример в этом сообщении в блоге.