2015-11-21 2 views
3

Je suis en train de sécuriser mon serveur REST avec JWT que j'ai implémenté moi-même (ce qui signifie que pas de trucs de printemps dans le JWT, tout le reste est Spring bien sûr).Secure REST Api avec Spring boot et JWT

J'ai cette classe: JWTToken implements Authentication.

J'ai un filtre qui est responsable de la mise en l'instance JWTToken au SecurityContextHolder:

public class JwtFilter extends GenericFilterBean { 
public void doFilter(...) { 
    .... 
    JWTToken token = new JWTToken(jwt); // this init the Authentication object with all the jwt claims 
    SecurityContextHolder.getContext().setAuthentication(token); 
    .... 
} 

J'ai aussi une ressource pour le débogage ceci:

@RequestMapping(
     value = "/protected_resource", 
     method = RequestMethod.POST 
) 
@RolesAllowed("admin") 
public RESTResponse<String> debugJwt() { 
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // here I can see that the context is the right one 
    return new RESTResponse<>("This was successful", "feedback message", true); 
} 

Je manque une paix du puzzle que je ne pouvais pas trouvé dans l'une des ressources en ligne et c'est comment mettre en œuvre WebSecurityConfigurerAdapter et plus précisément le configure(HttpSecurity http) metohd.

Quand j'ai essayé ce faire, par exemple:

http.authorizeRequests().anyRequest().authenticated() 

Les demandes ne passaient pas par cela et la ressource est pas appelé.

Qu'est-ce qui me manque ici?

Répondre

2

Votre JWTToken classe doit mettre en œuvre la méthode:

Collection<? extends GrantedAuthority> getAuthorities(); 

La mise en œuvre doit retourner une collection des rôles accordés utilisateur, l'un d'entre eux sera le rôle « admin », quelque chose comme:

public Collection<? extends GrantedAuthority> getAuthorities() { 
    return Collections.singletonList(new SimpleGrantedAuthority("admin")); 
} 

Bien sûr, dans votre cas, vous allez interroger le jeton DB ou JWT et analyser les rôles utilisateur.