Jetez un coup d'œil à ce le projet est très bien mis en œuvre et dispose de la documentation nécessaire.
1 . Dans le projet ci-dessus, c'est la seule chose dont vous avez besoin pour valider le jeton et c'est suffisant. Où se trouve token
est la valeur de la Bearer
dans l'en-tête de la demande.
try {
final Claims claims = Jwts.parser().setSigningKey("secretkey")
.parseClaimsJws(token).getBody();
request.setAttribute("claims", claims);
}
catch (final SignatureException e) {
throw new ServletException("Invalid token.");
}
2 . Voler le jeton n'est pas si facile mais, d'après mon expérience, vous pouvez vous protéger en créant manuellement une session Spring pour chaque connexion réussie. Mettez également en correspondance l'ID unique de la session et la valeur du porteur (le jeton) dans un fichier de type Carte (création d'un Bean par exemple avec une portée API).
@Component
public class SessionMapBean {
private Map<String, String> jwtSessionMap;
private Map<String, Boolean> sessionsForInvalidation;
public SessionMapBean() {
this.jwtSessionMap = new HashMap<String, String>();
this.sessionsForInvalidation = new HashMap<String, Boolean>();
}
public Map<String, String> getJwtSessionMap() {
return jwtSessionMap;
}
public void setJwtSessionMap(Map<String, String> jwtSessionMap) {
this.jwtSessionMap = jwtSessionMap;
}
public Map<String, Boolean> getSessionsForInvalidation() {
return sessionsForInvalidation;
}
public void setSessionsForInvalidation(Map<String, Boolean> sessionsForInvalidation) {
this.sessionsForInvalidation = sessionsForInvalidation;
}
}
Ce site SessionMapBean
sera disponible pour toutes les sessions. Maintenant, à chaque demande, vous ne vérifierez pas seulement le jeton, mais vous vérifierez également s'il mathématise la session (en vérifiant que l'identifiant de session de la demande correspond bien à celui stocké dans le fichier SessionMapBean
). Bien entendu, l'identifiant de session peut également être volé. Il faut donc sécuriser la communication. Les moyens les plus courants de voler l'ID de session sont les suivants Reniflage de session (ou les Hommes au milieu) et Attaque intersites par script. . Je ne vais pas entrer dans les détails, vous pouvez lire comment vous protéger de ce genre d'attaques.
3. Vous pouvez le voir dans le projet que j'ai lié. Plus simplement, le filtre validera tous les /api/*
et vous vous connecterez à un /user/login
par exemple.