새소식

반응형
Java/Spring

JWT(Json Web Token)

  • -
반응형

- JWT(Json Web Token)

: 토큰기반시스템

: Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token

: 토큰 자체를 정보로 사용한다.

: 주로 회원인증이나 정보 전달에 사용된다.

: Header.Payload.Signature

* Header

: "typ": "JWT"

: "alg":"HS256" (HMAC SHA256 = HS256)

* Payload

: 토큰에서 사용될 정보의 조각들인 클레임이 들어있다.

* Signature

: 클라이언트의 유효성 검사를 위한 암호화 코드

1. 유저가 id, pw를 입력하여 로그인한다.

2. 서버측에서 해당 계정정보를 검증한다.

3. 계정정보가 일치하면, 서버측에서 유저에게 sign 토큰을 발급

4. 클라이언트는 토큰을 저장해두고 서버에 요청시 토큰과 함께 요청을 보낸다.

5. 서버는 클라이언트의 요청과 함께 넘어온 토큰정보를 검증하고, 확인완료 시 요청에 대한 응답

* 보통 클라이언트는 요청 헤더에 토큰값을 포함시켜 서버에 요청한다.

1. maven 설정 (jwt 를 사용하기 위한 dependency 추가)

- pom.xml 에 dependency 추가

<dependency>

<groupId>io.jsonwebtoken</groupId>

<artifactId>jjwt</artifactId>

<version>0.9.1</version>

</dependency>

2. JWT를 사용하기 위한 utils 생성

- package 경로/utils/JwtUtils.java

@Component

public class JwtUtils {

private HashMap<String, String> jwtToken = new HashMap<String, String>();

public String getJwtToken(String id) {

    return jwtToken.get("id");

}

public String setJwtToken(String id, String token) {

    this.jwtToken.put(id, token);

    return token;

}

//토큰 생성

public String createJwtToken(String id) {

    //현재 시간으로부터 10분

    Date date = new Date(System.currentTimeMillis() + 10 * 10000);

    return Jwts.builder()

        .setHeaderParam("typ", "JWT")

        .setId(id)

        .setExpiration(date)

        .signWith(SignatureAlgorithm.HS512, "oneplus")

        .compact();

}

// 토큰에 설정한 날짜와 아이디 체크

public boolean getExpIdToken(String token, String id) {

    try {

        Date exp = Jwts.parser().setSigningKey("oneplus")

                        .parseClaimsJws(token)

                        .getBody().getExpiration();

        Date date = new Date();

        if(exp.after(date) && getId(token).equals(id)) {

            return true;

        }

        return false;

    }catch(Exception e) {

        e.printStackTrace();

        return false;

    }

}

//토큰에 생성한 아이디 호출

public String getId(String token) {

    try {

        return String.valueOf(Jwts.parser().setSigningKey("oneplus")

                .parseClaimsJws(token)

                .getBody()

                .get("Id"));

    }catch(Exception e) {

            e.printStackTrace();

            return null;

    }

}

//토큰 삭제

    public void delToken(String id) {

        this.jwtToken.remove("id");

    }

}

반응형

'Java > Spring' 카테고리의 다른 글

Java hashCode(), equals()  (0) 2021.08.28
HashSet<T>  (0) 2021.08.25
@SelectKey, <selectKey>  (0) 2021.08.25
Spring - Dynamic Web Project 설정  (0) 2021.08.25
JVM, JRE, JDK 차이  (0) 2021.08.25
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.