2013-04-25 18 views
10

Próbuję utworzyć spokojną usługę internetową, która będzie używana przez inne usługi internetowe. Idealnie, gdy klient uzyskuje dostęp do usługi i nie jest uwierzytelniony, powinien uzyskać numer 401. Chcę, aby użytkownik był w stanie uwierzytelnić, dodając nagłówek uwierzytelniania do żądania. Nie chcę, aby użytkownik wypełnił formularz logowania i opublikował to. Nie chcę również, aby zapisywał jakiekolwiek dane logowania w pliku cookie (tj. Utrzymywanie stanu), a wszystkie powinny znajdować się w nagłówku auth wysyłanym przy każdym żądaniu. Użyłem spring roo do stworzenia usługi sieciowej.Reszta uwierzytelniania podstawowego za pomocą zabezpieczeń sprężynowych bez logowania się za pomocą formularza

Co mam obecnie (pobrane z jednego z wiosennych samouczków bezpieczeństwa 3.1), kiedy użytkownik otrzymuje 401, są one oznaczone stroną logowania, a następnie opublikować stronę, otrzymując plik cookie, który wysyłają z każdym z nich. żądanie.

Oto mój xml bezpieczeństwa wiosny.

<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> 

Kiedy wysłać żądanie loków, pojawia się następujący:

$ 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 

gdzie mój podstawowy znacznik nagłówka jest base64 (customer1: inne)

Jak mogę uzyskać usługę internetową zaakceptować nagłówek auth i nie przekierować mnie na stronę logowania?

Po usunięciu pliku security.xml otrzymuję następujący wyjątek: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Problem konfiguracji: Nie można ustanowić AuthenticationEntryPoint. Upewnij się, że masz mechanizm logowania skonfigurowany w przestrzeni nazw (np. Logowanie do formularza) lub określ niestandardowy adres AuthenticationEntryPoint z atrybutem "entry-point-ref".

Odpowiedz

8

Potrzebowałem usunąć <form-login> i dodać <http-basic>. Do mojej konfiguracji dodano także create-session- "stateless".

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

obserwować tą testową demo JAX-RS z zabezpieczeniem sprężynowym http://svn.apache.org/repos/asf/cxf/trunk/distribution/src/main/release/samples/jax_rs/spring_security/

to proste podejście do uwierzytelniania bez promowania poświadczeń.

można przejść z realizacji RequestHandler i nadrzędnym

public Response handleRequest(Message message, ClassResourceInfo resourceClass); 

obserwacji: http://cxf.apache.org/docs/secure-jax-rs-services.html do kompletu podejścia.

6

Oto konfiguracja non-xml przykład do uwierzytelniania spoczynku lub z formularza lub z podstawowym co potrzebne:

.and().httpBasic(); 

czyni magię!))

@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(); 
    } 
... 
} 
Powiązane problemy