JWT(Json Wep Token) 토큰인증 ?

송은혜·2022년 3월 10일
0

내가 이해한대로

목록 보기
6/12

JWT (Json Wep Token) ❓

인증에 필요한 정보를 암호화한 토큰으로 만들어, 안정성 있게 정보를 전달할 수 있게 해주는 인증방식이다.

JWT는 secret key 와 payload 를 만들어 사용한다.

secret key에는 말 그대로 비밀 암호를 넣어준다. payload에는 서버에 들어갈 사용자의 고유 정보를 넣어주고 , 이들을 토대로 토큰을 생성한다.

token > secret key(서버에서 사용될 암호), payload(ex.사용자의 id, 유효기간 등 )

마침표를 기준으로 3부분으로 나뉜다.

첫 번째 - header 헤더
토큰의 타입. (고정값으로 JWT가 들어간다.)
alg - 3번에서 서명값을 만드는데에 사용 될 알고리즘이 지정되어있다.

두 번째 - payload 페이로드
토큰을 누가 발급했는지, 토큰이 언제까지 유효한지, 공개하려는 사용자의 정보. 이를테면 아이디, 권한, 레벨 등을 원하는데로 담을 수 있다.
이렇게 담기는 정보들을 claim이라고 부른다.

세 번째 - 서명값
페이로드에 담긴 정보와 서버에 저장되어있는 시크릿 키를 alg에 지정되어있는 알고리즘으로 돌려 서명값을 만든다.
시크릿키는 절대 유출되서는 안된다!


각 사용자마다 토큰을 부여하여 인증된 사용자인지 구별할 수 있고, 토큰에 부여한 유효기간 설정을 통해 재 로그인의 번거로움을 해소할 수 있고, 암호화가 풀리더라도 유효기간을 짧게 설정하면 보안을 강화할 수 있다.

❗다만, 유효기간이 유지되는 동안은 삭제를 할 수 없어서 해킹이 되고 있다면 유효기간이 끝날때까지 크게 손을 쓸 수 없다... 보안이 중요하다면 유효기간을 짧게하는 것이 좋겠다.

그래서 토큰 하나만 발급하는 방식이 아니라 2개를 발급하는 방식으로 개선하여 사용한다.
액세스 토큰과 리프레시 토큰 두가지를 발급한다.

액세스 토큰
요청에 대한 인가를 확인할 때 사용하고, 유효기간을 짧게 설정해준다.

리프레시 토큰
유효기간을 길게 잡고(보통2주정도 한다고함.) DB에 저장해둔다.

로그인이 성공했을 때 액세스 토큰과 리프레시 토큰을 모두 발급해주고, 사용자들은 인가가 필요할 때마다 액세스 토큰으로 서버에 확인을 받는다.
액세스토큰의 유효기간이 끝났을 경우, 가지고 있던 리프레시 토큰을 서버로 보내서 액세스토큰을 재발급받는다.


❗정보를 넣어주는 payload가 따로 암호화 되지 않기 때문에 , 디코딩을 하면 누구든 payload 안의 정보를 확인 할 수 있다. 따라서 중요한 개인정보나, 패스워드 같은 경우는 넣지 않는 것이 바람직하다.

❗큰 장점으로는 별도에 저장소가 필요 없어, 서버의 확장이나 유지보수에 유리하다. 확장성이 좋아서 토큰을 기반으로 하는 다른 인증 시스템에도 접근할 수 있어, 타 웹서비스에서도 로그인을 할 수 있다.

0개의 댓글