>  기사  >  Java  >  Java API 개발에서 JWT 인증 사용

Java API 개발에서 JWT 인증 사용

王林
王林원래의
2023-06-17 23:38:461745검색

인터넷 애플리케이션이 널리 사용되면서 보안 문제가 점차 중요한 주제가 되었습니다. 애플리케이션의 보안을 보장하기 위해 개발자는 무단 액세스 및 공격을 방지하기 위한 다양한 조치를 취해야 합니다. JWT(JSON Web Token)는 웹 애플리케이션 선언에 사용되는 보안 전송 방법입니다.

Java API 개발에서 JWT 인증을 사용하면 API 보안을 효과적으로 보호하고 개발 프로세스 중에 액세스 제어를 용이하게 할 수 있습니다.

  1. JWT의 기본 개념

JWT는 Header, Payload, Signature 세 부분으로 구성됩니다. 헤더는 일반적으로 HMAC SHA256 또는 RSA 암호화를 사용하여 JWT 유형과 사용되는 알고리즘을 설명하는 데 사용됩니다. 페이로드는 일반적으로 사용자 ID, 만료 시간 등을 포함한 JWT 관련 정보를 저장하는 데 사용됩니다. 서명은 JWT의 신뢰성과 무결성을 보장하기 위해 처음 두 부분을 암호화한 결과입니다.

  1. JWT 인증 구현 단계

JWT 인증을 사용하기 전에 다음 단계를 수행해야 합니다.

2.1 JWT 생성

JWT를 생성하려면 HMAC SHA256 또는 RSA와 같은 암호화 방법을 사용해야 합니다. 구체적인 구현은 다음 코드를 참조하세요(참고용):

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 JWT 확인

JWT를 확인하는 과정은 매우 간단합니다. JWT를 구문 분석하고 여기에 포함된 정보를 기반으로 확인하기만 하면 됩니다. . 일반적으로 JWT 확인은 다음 조건을 충족해야 합니다.

  • JWT 서명 확인
  • JWT 만료 시간 확인
  • JWT 페이로드에 포함된 정보가 올바른지 확인

특정 구현의 경우 , 다음 코드를 참조하세요(참고용) ):

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. Java API에서 JWT 인증 사용

Java API에서 JWT 인증을 사용하는 단계는 다음과 같습니다.

3.1 JWT 획득

사용자가 인증을 받은 후 성공적으로 로그인하면 서버는 JWT를 클라이언트에 반환해야 하며 클라이언트는 JWT를 로컬에 저장할 수 있습니다.

3.2 요청 보내기

클라이언트가 요청을 보낼 때 다음과 같이 일반적으로 요청 헤더에 포함될 수 있는 JWT를 가져와야 합니다.

Authorization: Bearer {token}

3.3 JWT 확인

서버는 요청을 받은 후 JWT의 유효성을 확인하고 사용자가 인증된 후 액세스하는지 확인하세요. JWT 확인에 실패하면 해당 오류 메시지가 반환됩니다.

구체적인 구현은 다음 코드를 참조하세요(참고용):

@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. 요약

Java API 개발에서 JWT 인증을 사용하면 API 보안을 보장하고 개발자의 액세스 제어를 용이하게 할 수 있습니다. JWT를 사용하면 JWT는 구조가 간단하고 구현이 쉬우면서도 서버의 부담을 줄일 수 있다는 장점이 있습니다. 그러나 JWT는 재생 공격을 받을 수 있으므로 이러한 상황을 방지하려면 구현 시 해당 조치를 취해야 합니다.

위 내용은 Java API 개발에서 JWT 인증 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.