JWT 토큰에 대하여

면접 준비하면서 내가 JWT 토큰에 대해서 잘 모른다고 생각해서 내용 정리

 

JSON 웹토큰(JWT)은 온라인 네트워크에서 정보를 안전하게 통신할 때 사용하는 인터넷 표준 토큰

 

 

JWT가 제공하는 건 기밀성(confidentiality)이 아니라 무결성(integrity)입니다.

 

즉 "내용을 숨기는게" 아니라

"내용이 위변조되지 않았음을 증명"하는 것

 

면접 질문 중에 A고객사는 재고 조회 API만 허용하고 B고객사는 재고 조회 API, 출고 요청 API 등 이런식으로 고객사별로 서로 다른 API 권한을 주고 싶을 때 어떻게 하냐?는 질문을 받았는데...

 

나는 그만.. API를 버저닝하는 걸로 답해버렸다. JWT에 IP정보를 넣을 생각까지 했으면서 왜 권한은 JWT에 포함시킬 생각을 못 했을까..

 

결과적으론 IP 정보는 JWT에 넣으면 안 될 것 같다. 개발자들이 개발서버에서 테스트하려고 할 때 자주 바뀔 위험이 있는 IP를 JWT에 넣는 다면 VPN을 사용해서 고정 IP를 사용하면 되긴 하지만 그건 근본적인 해결책이 아님. 결국 IP정보를 제거해야함.

 

** JWT 토큰에 scope 항목에 read:inventory 를 추가해서 재고 조회 API만 허용하도록 할 수 있다.

 

회사에서 uuid를 이용한 access_token을 발급하는 방식으로 사용하면서 Open API로 API를 호출할 때 request param, request body에 꼭 항상 cstCd를 넘겨서 조회했는데 이건 잘못된 방식

 

이유 : 고객이 본인의 cstCd 이외의 다른 고객사 코드를 입력하게 될 경우 다른 고객사의 정보를 조회하거나 조작할 수 있음 -> 심각한 위험성 고객의 사업에 대한 민감한 정보 조회가능

 

그래서 JWT 토큰을 리턴해주면서 거기에 isa, isu, exp 이외에도 cstCd 정보를 포함시켜서 토큰을 생성합니다. 발급받은 토큰으로 고객사가 API를 호출할 때 JWT 토큰의 서명을 확인하면서 claims 정보의 cstCd정보를 확인해서 해당 cstCd 정보를 바탕으로 API 동작합니다.

반응형