Дайджест-аутентификация Glassfish

Я хочу создавать веб-сервисы RESTful с использованием JAX-RS (Джерси + Джексон, Джексон для производства JSON).

Я использую Glassfish 4.0 в качестве сервера и netbeans в качестве IDE.

Веб-сервисы работают нормально, но на данный момент у меня нет аутентификации.

так что теперь я думаю о дайджест-аутентификации, которая хэширует пароль, чтобы вам никогда не приходилось передавать пароль в виде простого текста. И дополнительно я хочу использовать https, чтобы данные были зашифрованы.

Я понял теорию. Но я понятия не имею, как я могу сделать это в Netbeans с помощью Glassfish.

Я видел несколько туториалов, делающих что-то в административной консоли Glassfish. Но разве нет способа сделать это только в netbeans? Могу ли я определить область в netbeans, которая будет создана при развертывании приложения?

После создания мира и прочего. Я думаю, мне нужно внедрить какой-то аутентифицированный «пользовательский» объект во все мои ресурсы (веб-сервисы). Но я никогда не делал этого раньше. И я ищу хороший учебник, в котором описывается, как я могу настроить дайджест-аутентификацию, а инъекция через netbeans может сделать это с помощью netbeans, чтобы я мог хорошо это понять.


person Laokoon    schedule 27.08.2013    source источник


Ответы (1)


Примечание. Мой ответ не охватывает часть вопроса, связанную с использованием Netbeans для настройки аутентификации контейнера.

Я так понимаю, что нужно реализовать только серверную часть (клиентскую часть не надо).

На сервере есть две части, которые вам нужно решить: аутентификация и авторизация.

Аутентификация

Если вы решите использовать базовую аутентификацию HTTP, дайджест-аутентификацию HTTP или аутентификацию сертификата клиента, вам нужно будет разрешить Glassfish выполнить аутентификацию. Если вы хотите использовать SSL для транспорта, я бы предпочел использовать базовую аутентификацию HTTP. Пароли отправляются в виде открытого текста, но сообщение зашифровано. Преимущество состоит в том, что эту аутентификацию проще реализовать для клиентов. Чтобы определить базовую аутентификацию HTTP, вы можете использовать web.xml вашего приложения и определить теги «ограничение безопасности» и «логин-конфигурация». Например:

<security-constraint>
    <web-resource-collection>
        <url-pattern>/rest/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>customer</role-name>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>my-defaul-realm</realm-name>
</login-config>

Это не конкретное решение Glassfish; он будет работать и на других серверах приложений. Контейнер выполнит аутентификацию, и эта информация будет доступна в вашем приложении JAX-RS в javax.ws.rs.core.SecurityContext.

Авторизация

Теперь вы можете использовать SecurityContext для извлечения принципала пользователя, проверки роли пользователя и т. д. Кроме того, в Джерси предусмотрена возможность использования аннотаций @RolesAllowed("...") и @PermitAll для определения доступа к ресурсам ( аннотации взяты из пакета javax.annotation.security). Вам необходимо зарегистрировать RolesAllowedDynamicFeature в Джерси, чтобы разрешить обработку этих аннотаций. Например, вы можете определить следующий метод ресурса:

@RolesAllowed("admin")
@GET
public String get() {
  return "admin private resource"; 
}

Это приведет к тому, что только пользователь с ролью «admin» сможет выполнить метод get().

Вы можете проверить документацию Джерси для получения более подробной информации (глава о безопасности): https://jersey.java.net/documentation/latest/security.html

person Miroslav Fuksa    schedule 27.08.2013