
JWT 기반 인증은 JWT 토큰을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.Header, Payload, Signature로 이루어져있다.alg: 정보를 암호화할 해싱 알고리즘typ 토큰의 타입을 지정 "alg": "HS256",
"typ": "JWT"
클라이언트 고유 ID, 유효 기간 등이 포함된다.Key-Value 형식으로 이루어진 한 쌍의 정보를 Claim이라고 한다. "sub": "0123456789",
"name": "김지원",
"iat": 1516230922
Header, Payload를 더한 뒤, 비밀키로 해싱하여 생성Header 및 Payload는 단순 인코딩된 값이기 때문에 해커가 복호화하고 조작할 수 있지만, Signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할 수 없다.HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret_key
)
Payload에 담는다.Access Token(JWT)을 발급한다.Authorization에 포함시켜 전달한다.Signature 을 SECRET KEY로 복호화한 다음, 위변조 여부 및 유효 기간 등을 확인한다.Payload를 디코딩 하여 사용자의 ID에 맞는 데이터를 가져온다. implementation 'io.jsonwebtoken:jjwt-api:0.13.0'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.13.0'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.13.0'
$bytes = New-Object byte[] 64
[System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($bytes)
[Convert]::ToBase64String($bytes)
jwt:
secret: ${JWT_SECRET}
access-token-expiration: 3600000 //1시간
https://tecoble.techcourse.co.kr/post/2021-05-22-cookie-session-jwt/