[Spring security] JWT login API 구현하기(2)

오영선·2023년 8월 7일
0

javaSpring

목록 보기
5/7

login 서비스 로직 작성하기

[Spring security] JWT login API 구현하기(1)

로그인은 세가지 단계로 구분할 수 있다.

1. 로그인 ID확인

2. 비밀번호 확인

3. (로그인 성공시) 토큰 생성 및 반환


JwtTokenUtils 코드는 아래에

회원가입 서비스 로직

1. 로그인 ID 중복검사

2. 비밀번호 encode후 save

로그인 성공(패스워드 일치) 후에는 토큰을 생성해야 한다.
JWT 구조, JWT 토큰 구조

jwt 토큰은 claim 이라는 정보조각들로 구성되며, 간략하게만 설명하자면 만료시간, key, 등록 시간 등의 정보가 담기면 된다.

package com.haedal.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;

import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.util.Date;

public class JwtTokenUtils {
    public static String generateToken(String userName, String key, long exporedTimeMs){
        Claims claims = Jwts.claims();
        claims.put("userName", userName);

        return Jwts.builder()
                .setClaims(claims)
                .setIssuedAt(new Date(System.currentTimeMillis()))
                //등록시간
                .setExpiration(new Date(System.currentTimeMillis()+exporedTimeMs))
                //만료시간
                .signWith(getKey(key), SignatureAlgorithm.HS256)
                //key, Hash 256byte
                //이때 키는 string이 아니라 byte로 인코딩 해준 후 들어간다.
                .compact();
    }

    private static Key getKey(String key) {
        byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
        return Keys.hmacShaKeyFor(keyBytes);
    }
 }

이렇게만 하면 sign, login의 jwt를 통한 암호화 과정은 끝이 난다.

그러나 웹서비스는 로그인을 구현한다고 해서 JWT를 완전히 사용한다고 할수는 없다. 예를들면 마이페이지 조회같은 api는 로그인한 사용자가 자신의 정보만 확인할 수 있도록 권한 설정이 필요하다.

그러니 로그인 성공 후, 다른 API를 사용하기 위해 토큰을 받아 이후에는 토큰을 이용해 권한을 지속적으로 인증하고 싶다면 filter가 필요하게 된다.

이 부분에 대해서는 3편에서 다루도록 하겠다.

1개의 댓글

comment-user-thumbnail
2023년 8월 7일

이렇게 유용한 정보를 공유해주셔서 감사합니다.

답글 달기