2020. 5. 21. 20:40ㆍBACKEND
안녕하세요.
이 번 포스팅은 토큰 기반 인증에 대해서 알아보겠습니다.
JWT 는 JSON Web Token이라는 의미를 갖고 있습니다.
정보를 비밀리에 전달하거나, 인증을 할 때 사용하게 됩니다.
이 번 포스팅으로 JWT에 대해 더 자세히 알아보고, 사용해보도록 하겠습니다.
***************** INDEX *****************
[1장]
Token 기반 인증
[2장]
🌈 JWT❓
🏰 JWT 구조
********************************************
🌈 첫 번째, JWT❓
JWT는 JSON Web Token입니다.
Token 기반 인증의 대명사죠 〰️
JWT를 사용해서 두 개체 사이(ex. 클라이언트와 서버)에서 JSON 객체를 사용하여 정보를 안전성 있게 전달할 수 있습니다.
공식 홈페이지 :https://jwt.io/
✔️JWT, 왜 쓸까❓
단순한 String 형태이기 때문에 가볍고, 데이터를 토큰 내부에 포함(self-contained)합니다.
HTTP 헤더나 URI 파라미터를 이용해 전달할 수 있으며,
RFC 표준 (인터넷 상의 규칙과 표본을 정의해둔 곳)으로 등록되었기 때문에다양한 프로그래밍 언어 (C, Java, PHP, JavaScript, Swift … )에서 지원을 해주고 있습니다.
이제 JWT가 어떻게 생겼고, 어떻게 인증을 하는지 확인해볼게요❗️
🏰 두 번째, JWT의 구조
JWT는 복잡하고 읽을 수 없는 String 형태로 지정되어있습니다.
위의 그림처럼 굉장히 복잡하고 난해한 스트링이죠 😅
크게 세 부분으로 나뉘며 온점(.)을 통해 연결되어있어요.
이제, 각각의 구조가 어떤 영역을 뜻하는 지 알아볼까요 ❓
위의 그림의 구조를 가지고 있습니다.
하나씩 살펴볼까요❓
✔️ header
JWT 헤더 부분에는 토큰을 해싱할 알고리즘과 토큰의 타입을 지정할 수 있습니다.
✔️ Payload
Payload부분에는 토큰에 담을정보를 담습니다.
Payload의 name : value 의 한 쌍의 ‘조각’ 을 클레임claim이라고 부르는데요, 토큰에는 여러 개의 클레임들을 넣을 수 있습니다.
클레임은 크게 registered claim, public claim, private claim으로 나눌 수 있습니다.
register claim
토큰에 대한 정보들을 담기 위하여 이름이 이미 정해진 클레임을 의미합니다.
iss
: 토큰발급자(issuer)
sub
: 토큰 제목(subject)
aud
: 토큰 대상자audience
exp
: 토큰의만료시간(expiraton). 시간은Numeric Date형식이어야 하며 (예: 1480849147370) 항상 현재 시간보다 이후로 설정되어 있어야 합니다.
iat
: 토큰이 발급된 시간(issued at). 토큰의 age 가 얼마나 되었는지 판단합니다.
public claim
공개된 클레임은 이름이 겹치지 않도록collision-resistant주의해야 합니다.
클레임 이름으로 URI를 사용할 수 있습니다.
private claim
등록된 클레임도 아니고, 공개된 클레임들도 아닌 데이터를 의미합니다.
클라이언트와 서버 합의 하에 사용하기로 약속한 이름을 의미합니다.
이름이 중복 될 경우가 있으니 사용 시 유의해야합니다 ❗️
위의 그림을 보시면 idx, id, age라는 값을 넣어주었어요.
JWT를 복호화하면 idx, id, age를 얻어낼 수 있다는 의미입니다 ❗️
✔️ Verify Signature
마지막부분에는 JWT 해싱할 때, 복호화할 수 있는 비밀키가 같이 포함되어있습니다.
your-256-bit-secret 에 자신의 비밀키를 넣으면 됩니다.
만약, JWT를 해싱하고 싶다면 공식홈페이지로 가보면 됩니다.
왼쪽은 Encoded된 JWT가 보여지고, 오른 쪽엔 Decoded가 된 정보들이 나열됩니다.
JWT를 다루는 방식은 이 전 포스팅에서 Access Token & Refresh Token 을 다루는 부분을 보면 될 것 같아요 〰️
'BACKEND' 카테고리의 다른 글
Cookie Parking, SERVER.log (0) | 2021.02.14 |
---|---|
Markdown, 어렵지 않게 사용하기 (0) | 2020.06.14 |
JWT, 어렵지 않게 사용하기 - token 기반 인증 (3) | 2020.05.21 |
Postman, 어렵지 않게 사용하기 - 사용 (4) | 2020.04.29 |
Postman, 어렵지 않게 사용하기 - 소개 (0) | 2020.04.29 |
Backend Software Engineer
𝐒𝐮𝐧 · 𝙂𝙮𝙚𝙤𝙣𝙜𝙨𝙪𝙣 𝙋𝙖𝙧𝙠