[spring/OAuth2]카카오 인증

kongta2·2023년 12월 11일

포스트맨을 이용한 카카오인증 실습이다.

1. kakao developers 앱키

developers.kakao.com/ 사이트로 이동해서 나의 어플리케이션을 등록해준 뒤 앱키의 REST API키를 받아온다.


2. 포스트맨 인증코드 요청 후 액세스 토큰 받기


Authorization에서 필요한 값들을 입력해준 뒤 액세스 토큰을 받아온다.



3. 액세스 토큰을 로그인 기능의 RequestParam 값으로 넣기


4. 핵심 코드

UserController - kakaoLogin

    @PostMapping("/kakaoLogin")
    public ResponseEntity<CommonResponseDto> kakaoLogin(@RequestParam String code, HttpServletResponse response) throws JsonProcessingException {

        try {
            String token = kakaoService.kakaoLogin(code, response);
            Cookie cookie = new Cookie(JwtUtil.AUTHORIZATION_HEADER, token.substring(7));
            cookie.setPath("/");
            response.addCookie(cookie);
        } catch (HttpClientErrorException e){
            return ResponseEntity.badRequest().body(new CommonResponseDto("로그인 실패", HttpStatus.BAD_REQUEST.value()));
        }

        return ResponseEntity.ok().body(new CommonResponseDto("로그인 성공", HttpStatus.OK.value()));
    }

kakaoService - kakaoLogin

    public String kakaoLogin(String code, HttpServletResponse response) throws JsonProcessingException {

        KakaoUserInfoDto kakaoUserInfo = getKakaoUserInfo(code);

        User kakaoUser = registerKakaoUserIfNeeded(kakaoUserInfo);

        String createToken = jwtUtil.createToken(kakaoUser.getUsername(), kakaoUser.getRole());
        response.addHeader(JwtUtil.AUTHORIZATION_HEADER, createToken);


        return createToken;
    }

jwtUtil - createToken

    public String createToken(String username, UserRoleEnum role) {
        Date date = new Date();

        long TOKEN_TIME = 60 * 60 * 1000;
        return BEARER_PREFIX +
                Jwts.builder()
                        .setSubject(username)
                        .claim(AUTHORIZATION_KEY, role)
                        .setExpiration(new Date(date.getTime() + TOKEN_TIME))
                        .setIssuedAt(date)
                        .signWith(key, signatureAlgorithm)
                        .compact();
    }
profile
2025.04.01~

0개의 댓글