권한 부여 : 사용자가 로그인, SSO 등에서 사용
정보 교환 : 정보를 안전하게 전송, 발신자 확인, 헤더와 페이로드를 통한 변조 여부 확인
JWT은 .
(점)을 통해 Header, Payload, Signature를 구분한다.
{
"alg": "HS256",
"typ": "JWT"
}
Base64Url 인코딩 되어 JWT의 첫 부분을 형성(aaaaaa.bbbbbb.cccccc 의 aaaaaa 부분)
claim 을 포함
단 3 자로 표현
타입
Registered claim : 필수는 아니지만 권잔되는 미리 정의된 클레임 집합, iss(발급자), exp(만료시간), sub(제목), aud(대상) 등등
Public claim : 마음대로 정의 가능하나, 충돌방지를 위해 IANA JWT registry 에 정의하거나 충돌 방지 네임 스페이스를 포함하는 URI로 정의
Private claim : 사용의 동의 했으나 등록/공개 클레임이 아닌 정보를 공유하기 위해 맞춤 생성된 클레임.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
인코딩된 헤더/페이로드/ 암호 및 헤더에 지정된
알고리즘을 가져와서 서명
HMAC SHA256 알고리즘을 사용해서 서명하는경우
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
서명으로 메시지 변조 및, 누구에게 보낸 토큰인지 확인 가능
점 3개로 부분된 Base64-URL 문자열
다음 다이어그램은 JWT를 얻고 API 또는 리소스에 액세스하는 데 사용하는 방법을 보여줍니다.
1. 애플리케이션 또는 클라이언트가 권한 부여 서버에 권한 부여를 요청합니다. 이것은 다른 권한 부여 흐름 중 하나를 통해 수행됩니다. 예를 들어, 일반적인 OpenID Connect 호환 웹 애플리케이션은 인증 코드 흐름을/oauth/authorize 사용하여 엔드포인트를 통과합니다 .
2. 권한이 부여되면 권한 서버는 애플리케이션에 액세스 토큰을 반환합니다.
3. 애플리케이션은 액세스 토큰을 사용하여 보호된 리소스(예: API)에 액세스합니다.
jwt.io
알맹이 다지기
https://velog.io/@ikswary/JWT
권한 인증 방식
[JWT] JSON Web Token 소개 및 구조
Express에서 JWT로 인증시스템 구현하기 ( Access Token과 Refresh Token )
npm - jsonwebtoken
Strategies for implementing user authentication in serverless applications
API Gateway Lambda 권한 부여자 사용
API Gateway Lambda 권한 부여자를 사용하여 API 호출
JWT는 어디에 저장해야할까? - localStorage vs cookie