Rumah  >  Artikel  >  Java  >  Menggunakan pengesahan JWT dalam pembangunan API Java

Menggunakan pengesahan JWT dalam pembangunan API Java

王林
王林asal
2023-06-17 23:38:461738semak imbas

Dengan penggunaan aplikasi Internet yang meluas, isu keselamatan secara beransur-ansur menjadi topik penting. Untuk memastikan keselamatan aplikasi, pembangun perlu mengambil pelbagai langkah untuk menghalang capaian dan serangan yang tidak dibenarkan. JWT (JSON Web Token) ialah kaedah penghantaran selamat yang digunakan untuk pengisytiharan dalam aplikasi web.

Menggunakan pengesahan JWT dalam pembangunan API Java boleh melindungi keselamatan API dengan berkesan dan memudahkan kawalan akses semasa proses pembangunan.

  1. Konsep asas JWT

JWT terdiri daripada tiga bahagian iaitu Header, Payload dan Signature. Pengepala digunakan untuk menerangkan jenis JWT dan algoritma yang digunakan, biasanya menggunakan penyulitan HMAC SHA256 atau RSA. Muatan digunakan untuk menyimpan maklumat berkaitan JWT, secara amnya termasuk ID pengguna, masa tamat tempoh, dsb. Tandatangan adalah hasil penyulitan dua bahagian pertama untuk memastikan kredibiliti dan integriti JWT.

  1. Langkah untuk melaksanakan pengesahan JWT

Sebelum menggunakan pengesahan JWT, anda perlu melakukan langkah berikut:

2.1 Jana JWT

Menjana JWT memerlukan penggunaan kaedah penyulitan seperti HMAC SHA256 atau RSA. Untuk pelaksanaan khusus, sila rujuk kod berikut (untuk rujukan sahaja):

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

Proses pengesahan JWT adalah sangat mudah Anda hanya perlu menghuraikan JWT dan mengesahkan ia berdasarkan maklumat yang dibawa di dalamnya. Secara amnya, pengesahan JWT perlu memenuhi syarat berikut:

  • Sahkan tandatangan JWT
  • Sahkan masa tamat tempoh JWT
  • Sahkan sama ada maklumat yang dibawa dalam Muatan JWT Correct

Untuk pelaksanaan khusus, sila rujuk kod berikut (untuk rujukan sahaja):

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. Gunakan pengesahan JWT dalam Java API

Dalam Langkah-langkah untuk menggunakan pengesahan JWT dalam Java API adalah seperti berikut:

3.1 Dapatkan JWT

Selepas pengguna berjaya log masuk, pelayan perlu mengembalikan JWT kepada pelanggan, dan pelanggan boleh menyimpan JWT secara tempatan.

3.2 Hantar permintaan

Apabila pelanggan menghantar permintaan, ia perlu membawa JWT, yang biasanya boleh dibawa dalam pengepala permintaan, seperti berikut:

Authorization: Bearer {token}

3.3 Sahkan JWT

Selepas menerima permintaan, pelayan perlu mengesahkan kesahihan JWT untuk memastikan pengguna mengakses selepas disahkan. Jika pengesahan JWT gagal, mesej ralat yang sepadan dikembalikan.

Untuk pelaksanaan khusus, sila rujuk kod berikut (untuk rujukan sahaja):

@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. Ringkasan

Menggunakan pengesahan JWT dalam pembangunan API Java boleh memastikan keselamatan API dan kawalan akses yang mudah untuk pembangun. Kelebihan menggunakan JWT ialah JWT mempunyai struktur yang ringkas dan mudah untuk dilaksanakan, di samping mengurangkan beban pada pelayan. Walau bagaimanapun, perlu diambil perhatian bahawa JWT mungkin tertakluk kepada serangan ulang tayang, dan langkah-langkah yang sepadan perlu diambil dalam pelaksanaan untuk mengelakkan situasi ini.

Atas ialah kandungan terperinci Menggunakan pengesahan JWT dalam pembangunan API Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn