Maison >Java >javaDidacticiel >Utilisation de l'authentification JWT dans le développement d'API Java

Utilisation de l'authentification JWT dans le développement d'API Java

王林
王林original
2023-06-17 23:38:461758parcourir

Avec la généralisation des applications Internet, les questions de sécurité sont progressivement devenues un sujet important. Afin de garantir la sécurité des applications, les développeurs doivent prendre diverses mesures pour empêcher les accès non autorisés et les attaques. JWT (JSON Web Token) est une méthode de transmission sécurisée utilisée pour les déclarations dans les applications Web.

L'utilisation de l'authentification JWT dans le développement d'API Java peut protéger efficacement la sécurité de l'API et faciliter le contrôle d'accès pendant le processus de développement.

  1. Le concept de base de JWT

JWT est composé de trois parties, à savoir l'en-tête, la charge utile et la signature. L'en-tête est utilisé pour décrire le type de JWT et l'algorithme utilisé, utilisant généralement le cryptage HMAC SHA256 ou RSA. La charge utile est utilisée pour stocker les informations relatives à JWT, y compris généralement l'ID utilisateur, l'heure d'expiration, etc. La signature est le résultat du cryptage des deux premières parties pour garantir la crédibilité et l'intégrité de JWT.

  1. Étapes pour mettre en œuvre l'authentification JWT

Avant d'utiliser l'authentification JWT, vous devez effectuer les étapes suivantes :

2.1 Générer JWT

La génération de JWT nécessite l'utilisation de méthodes de cryptage telles que HMAC SHA256 ou RSA. Pour une implémentation spécifique, veuillez vous référer au code suivant (à titre de référence uniquement) :

public String generateToken(User user){
    String token = null;
    try {
        String key = "12898faaca29bde369e281e99193eab4d8";
        Algorithm algorithm = Algorithm.HMAC256(key);
        token = JWT.create()
               .withClaim("userId", user.getUserId())
               .withExpiresAt(new Date(System.currentTimeMillis()+60*60*1000))
               .sign(algorithm);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return token;
}

2.2 Vérification de JWT

Le processus de vérification de JWT est très simple. Il vous suffit d'analyser le JWT et de le vérifier en fonction des informations qu'il contient. . Généralement, la vérification JWT doit remplir les conditions suivantes :

  • Vérifier la signature du JWT
  • Vérifier l'heure d'expiration du JWT
  • Vérifier si les informations contenues dans la charge utile du JWT sont correctes

Pour une mise en œuvre spécifique , veuillez vous référer au code suivant (à titre de référence uniquement) :

public boolean verifyToken(String token){
    boolean flag=false;
    try {
        String key = "12898faaca29bde369e281e99193eab4d8";
        Algorithm algorithm = Algorithm.HMAC256(key);
        JWTVerifier verifier = JWT.require(algorithm)
                .build();
        DecodedJWT jwt = verifier.verify(token);
        String userId=jwt.getClaim("userId").asString();
        Date expiresAt=jwt.getExpiresAt();
        flag=true;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (Exception e){
        e.printStackTrace();
    }
    return flag;
}
  1. Utilisation de l'authentification JWT dans l'API Java

Les étapes pour utiliser l'authentification JWT dans l'API Java sont les suivantes :

3.1 Obtenir JWT

Après l'utilisateur se connecte avec succès, le serveur doit renvoyer JWT au client, le client peut enregistrer le JWT localement.

3.2 Envoyer une requête

Lorsque le client envoie une requête, il doit apporter le JWT, qui peut généralement être porté dans l'en-tête de la requête, comme suit :

Authorization: Bearer {token}

3.3 Vérifier le JWT

Le serveur doit vérifier le validité du JWT après réception de la demande, assurez-vous que les utilisateurs accèdent après avoir été authentifiés. Si la vérification JWT échoue, le message d'erreur correspondant est renvoyé.

Pour une implémentation spécifique, veuillez vous référer au code suivant (pour référence uniquement) :

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public ResponseEntity<String> login(@RequestBody User user) {
        User userExists = userService.validateUser(user);
        if (userExists != null) {
            String token = generateToken(userExists);
            return new ResponseEntity<String>(token, HttpStatus.OK);
        } else {
            return new ResponseEntity<String>("User not found!", HttpStatus.UNAUTHORIZED);
        }
    }

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public ResponseEntity<List<User>> getUsers(@RequestHeader("Authorization") String token) {
        if (verifyToken(token)) {
            List<User> users = userService.getUsers();
            return new ResponseEntity<List<User>>(users, HttpStatus.OK);
        } else {
            return new ResponseEntity<List<User>>(HttpStatus.UNAUTHORIZED);
        }
    }
}
  1. Résumé

L'utilisation de l'authentification JWT dans le développement d'API Java peut garantir la sécurité de l'API et faciliter le contrôle d'accès pour les développeurs. L'avantage de l'utilisation de JWT est que JWT a une structure simple et est facile à mettre en œuvre, tout en réduisant la charge sur le serveur. Cependant, il convient de noter que JWT peut être soumis à des attaques par relecture et que des mesures correspondantes doivent être prises lors de la mise en œuvre pour éviter cette situation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn