Сохранять базовую аутентификацию через spring безопасность без формы-входа

Я пытаюсь создать спокойную веб-службу, которая будет использоваться другими веб-службами. В идеале, когда клиент обращается к службе и не проходит проверку подлинности, он должен получить 401. Я хочу, чтобы пользователь мог аутентифицироваться, добавив в запрос заголовок проверки подлинности. Я не хочу, чтобы пользователь заполнил форму для входа и разместил ее. Я также не хочу, чтобы он сохранял учетные данные для входа в файл cookie (т.е. сохранял состояние), все они должны быть в сообщении заголовка auth с каждым запросом. Я использовал spring roo для создания веб-службы.

То, что у меня есть на данный момент (взято из одного из spring руководств по безопасности 3.1), когда пользователь получает 401, им предоставляется страница входа в систему, а затем публикуется страница, получая куки файл, который они отправляют с помощью каждый запрос.

Вот мой spring security xml.

 <http use-expressions="true">
   <intercept-url pattern="/customers/**" access="isAuthenticated()" />
 <intercept-url pattern="/**" access="denyAll" />
<form-login />
 </http>
<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="alice" password="other" authorities="user" />
            <user name="custome1" password="other" authorities="user" />
        </user-service>
    </authentication-provider>
</authentication-manager>

Когда я отправляю запрос от curl, я получаю следующее:

 $ curl -i -H "Accept: application/json" -H "Authorization: Basic Y3VzdG9tZXIxOm90aGVy" http://localhost:8080/Secured/customers

 HTTP/1.1 302 Found
 Server: Apache-Coyote/1.1
 Set-Cookie: JSESSIONID=B4F983464F68199FA0160DBE6279F440; Path=/Secured/; HttpOnly
 Location:      http://localhost:8080/Secured/spring_security_login;jsessionid=B4F983464F68199FA0160DBE6279F440
 Content-Length: 0
 Date: Thu, 25 Apr 2013 17:18:48 GMT

где мой основной токен заголовка - base64 (customer1: other)

Как я могу заставить веб-службу принять заголовок auth, а не перенаправить меня на страницу входа?

Когда я удаляю из security.xml, я получаю следующее excpetion: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Проблема с конфигурацией: Нет аутентификацииEntryPoint может быть установлена. Убедитесь, что у вас есть механизм входа в систему через пространство имен (например, форма-логин) или укажите пользовательский AuthenticationEntryPoint с атрибутом "entry-point-ref"

Ответ 1

Мне нужно было удалить <form-login> и добавить <http-basic>. Также добавлен create-session- "stateless" в мою конфигурацию.

 <http use-expressions="true" create-session="stateless" >
     <intercept-url pattern="/customers/**" access="isAuthenticated()" />
     <intercept-url pattern="/**" access="denyAll" />
     <http-basic/>
 </http>

Ответ 2

Вот пример конфигурации, отличной от xml для аутентификации Rest или с формой или базовым, что необходимо:

.and().httpBasic(); 

делает волшебство! ))

@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/someurl").hasRole("ADMIN")
            .antMatchers("/anotherurl").hasRole("USER")
            .antMatchers("/", "main").permitAll().anyRequest().authenticated()
            .and()
            .httpBasic();

        http.formLogin()
            .loginPage("/login").permitAll()
            .and()
            .logout().permitAll();
    }
...
}

Ответ 3

следуйте этой тестовой демонстрации jax-rs с безопасностью spring http://svn.apache.org/repos/asf/cxf/trunk/distribution/src/main/release/samples/jax_rs/spring_security/

это простой подход для аутентификации без продвижения учетных данных.

вы можете пойти с реализацией RequestHandler и переопределить

public Response handleRequest(Message message, ClassResourceInfo resourceClass);

выполните следующие действия: http://cxf.apache.org/docs/secure-jax-rs-services.html для полного набора подхода.