Json Web Token) 은 웹 표준으로써JWT는 Header, Payload, Signature 이렇게 3부분으로 구성된다
Header는 JWT 타입, 암호화 알고리즘등을 포함하고, Json형태이다
Payload는 클레임 정보와, 암호화 알고리즘등을 포함하고 ,Json 형태이다
Signiture는 Header와 Payload를 조합해, 비밀키를 이용해, 생성된 서명값이다

Payload 부분은 누구든지 값을 꺼내, Base64URLEncode를 통해 값이 무엇인지 확인할 수 잇다
중요한 정보보단, 참고할만한 정보를 담아두는 영역으로 생각하자
-JWT 토큰은 해시-알고리즘을 통해서 서명(signiture)을하게 되는데
Vreify Sihniture는

다음 부분을 가지고 시크릿 키와 해시 알고리즘을 통해 암호화한 후, 마지막줄에 붙여준다!
hash 알고리즘 : A라는 값에 어떠한 키를 넣고 암호화하면 항상, 같은 값이 나온다

// https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-api
implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
// https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-impl
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
// https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-jackson
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'


@SpringBootTest
class JwtApplicationTests {
@Autowired
private JwtService jwtService;
@Test
void tokenCreate(){
HashMap<String, Object> claims = new HashMap<>();
claims.put("user_id",923);
LocalDateTime expiredAt = LocalDateTime.now().plusMinutes(10);
String jwtToken = jwtService.create(claims, expiredAt);
System.out.println("jwtToken = " + jwtToken);
}
@Test
void tokenCreated(){
String token = "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo5MjMsImV4cCI6MTcwOTEyMTIzN30.7a25t16zha9Vhxvw5Weq9QnfkDeHWEGe6EsLyefakQE";
jwtService.validation(token);
}
}
Signatrue을 사용해 무결성을 보장, 토큰 변조 여부 쉽게 검증 가능