2016-04-09 6 views
2

Ich habe Artikel über die Verwendung von Spring Security nachgeschlagen, aber sie sind nicht ganz auf meine Bedürfnisse. Sie beschäftigen sich normalerweise mit In-Memory-Benutzern und Klartext-Passwörtern.Secure Spring Boot REST-App mit Standard-Authentifizierung

Was will ich erreichen:

Clients unter Verwendung der Standardauthentifizierung authentifizieren.

Secured Controller-Methoden wie folgt aussehen:

@RequestMapping(value = "/test") 
    public ResponseEntity test(@AuthenticationPrincipal MyUser user){ 
     // Logic 
    } 

ich die Controller-Methode ein MyUser Objekt in seine Parameter erhalten möchten, wenn der angegebene Benutzer authentifiziert ist oder null, wenn nicht.

Ich speichere Hash-Passwort und Salz eines Benutzers in einer Datenbank, und ich habe einen Dienst, der das angegebene Benutzername-Passwort-Paar authentifiziert und ein Benutzerobjekt oder Null zurückgibt, wenn die Authentifizierung erfolgreich war bzw. fehlgeschlagen ist.

Alles, was jetzt passieren muss, ist, jede Anfrage abzufangen, den Basis-Authentifizierungs-Header anzuschauen, die Informationen an meinen benutzerdefinierten Authentifizierungsdienst zu übergeben und dann das Ergebnis an die Controller-Methode zu übergeben. Leider konnte ich das nicht machen.


Ich las auf individuelle Verwendung UserDetailsService, aber das scheint nur Benutzerdaten aus der Datenbank zu handhaben das Abrufen und keine Authentifizierung. Ich kann nicht herausfinden, wie man alle Komponenten zusammen steckt.

Können Sie mir in die richtige Richtung zeigen, wie dieser einfache Workflow funktioniert?


EDIT

ich nicht XML-Konfigurations verwende und die einzige sicherheitsrelevanten Konfigurations ich habe, ist:

@Configuration 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
public class ApplicationSecurity extends WebSecurityConfigurerAdapter { 
    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http.antMatcher("/**").csrf().disable(); 

     http.authorizeRequests() 
       .antMatchers("/user").permitAll() 
       .antMatchers("/user/**").permitAll() 
       .anyRequest().authenticated(); 
    } 
} 
+0

Im Grunde, was Sie unten erstellen 'sucht nach ist, 'in das' ' Tag (wenn Sie XML-Stil-Konfiguration verwenden) hinzuzufügen. Für eine genauere Antwort können Sie Ihrem Post einige Details zu Ihrer Konfiguration hinzufügen? Zum Beispiel, die Konfigurationsdateien/Klassen und die 'web.xml' (wenn Sie welche haben) –

+0

Ich benutze keine XML-Config, ich habe es in-code. Es ist nicht viel dabei. Ich habe es der Frage –

Antwort

3

ich diesen Artikel denken hilfreich sein wird, wie ich verstehe, das ist, was Sie versuchen http://www.baeldung.com/spring-security-authentication-provider

+0

hinzugefügt Das sieht vielversprechend aus, ich werde es mir ansehen –

+1

Bitte unterlassen Sie die Beantwortung von Fragen mit _only_ einem Link: http://meta.stackexchange.com/q/8231 Um die Qualität Ihrer zu verbessern Beantworten Sie die relevanten Teile des Links in Ihrer Antwort. – JesperB

+0

Dies half teilweise, führte aber zu einem anderen Problem - http://stackoverflow.com/questions/36515895/custom-authenticationprovider-is-not-called –

2

Basic Authentifizierung können Sie auf 3 verschiedene Arten tun -

1 - Fügen Sie einfach feder Sicherheit Maven Abhängigkeit

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-security</artifactId> 
</dependency> 

automatisch die Standardauthentifizierung wie Benutzernamen aktivieren - „user“ und das Kennwort in der Konsole herausfinden können, Standardsicherheits Passwort - „bdd42ed9-635d-422b- 9430-ce463625fd2e“

2 - erstellen einer Konfigurationsklasse für Sicherheit wie unter Code

@Configuration 
@EnableWebSecurity 
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private AuthenticationEntryPoint authEntryPoint; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic(); 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); 
    } 
} 

3 - eine weitere Möglichkeit, dieses Add Standard-Benutzernamen und passwo zu tun in der Anwendung.Eigenschaftendatei wie unten

security.user.name=user 
security.user.password=password 

und Config-Klasse wie Code

@Configuration 
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic(); 
    } 
} 

noch einige Zweifel dann folgenden Link klicken Sie haben und sehen Sie sich dieses Video

Basic Authentication