STUDY/Python

CS간단정리 50문답(13-16) : JWT

nicesugi 2022. 7. 18. 19:15

13. 회원가입을 할 때 비밀번호를 암호화하여 저장하는 이유는 무엇입니까?

정보통신, 정보보호 등에 관한 법률 등에서는 인터넷을 통해 유통되는 정보의 보호를 위해 암호기술을 구현하도록 규정하였기 때문에 해쉬함수를 이용해 암호화하여 저장합니다. 보안은 절대 완벽할 수 없다고 생각하여 취약점으로 인해 정보가 탈취가 되었더라도 최대한 데이터의 정확한 정보를 확인하기 힘들게 위함이라 생각합니다.

 

14. JWT에 대해서 설명하시오

JSON Web Token의 약자로 속성 정보를 JSON 데이터 구조로 표현한 토큰입니다. 

세 파트로 나누어지며 각 점으로 구분하여 표현합니다. URL에서 파라미터로 사용할 수 있도록 URL-safe한 Base64url 인코딩을 사용합니다. 

header에는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있습니다 

payload는 토큰에 담은 클레임 정보를 포함하고 있습니다. 토큰에는 여러개의 클레임을 넣을 수 있으며 클레임은 name/value로 한쌍으로 이뤄집니다. 클레임은 registered/publich/private 세 종류가 있습니다.

signature는 secret key를 포함하여 암호화되어 있습니다.

 

15. JWT의 Access Token과 Refresh Token은 왜 필요한가요?

Access Token 만을 통한 인증 방식은 만일 제 3자에게 탈취당할 경우 보안에 취약하다. 서버에 저장되지 않고 토큰 자체로 검증을 하며 사용자 권한을 인증해주기에 토큰을 획득한 사람은 누구나 접근이 가능할 수 있기 때문에 유효시간을 부여하는 식으로 탈취문제에 대응해야한다. 하지만 유효기간이 길어지면 보안에 더욱 취약하기 때문에 유효기간을 짧게 잡았을 경우 자주 로그인을 하지 않을 수 있는 방법으로 나온 것이 Refresh Token 이다. 

접근 토큰의 유효기간이 만료 되었을 때 새로 재발급해주어 긴 유효기간도 갖게되고 보안도 지킬 수 있다.

 

예를 들면 처음에 로그인을 했을 때, 서버는 로그인을 성공시키면서 클라이언트에게 Access Token과 Refresh Token을 동시에 발급한다.

서버는 데이터베이스에 Refresh Token을 저장하고, 클라이언트는 Access Token과 Refresh Token을 쿠키, 세션 혹은 웹스토리지에 저장하고 요청이 있을때마다 이 둘을 헤더에 담아서 보낸다.

이 Refresh Token은 긴 유효기간을 가지면서, Access Token이 만료됐을 때 새로 재발급해주는 열쇠가 된다.

따라서 만일 만료된 Access Token을 서버에 보내면, 서버는 같이 보내진 Refresh Token을  DB에 있는 것과 비교해서 일치하면 다시 Access Token을 재발급하는 간단한 원리이다.

그리고 사용자가 로그아웃을 하면 저장소에서 Refresh Token을 삭제하여 사용이 불가능하도록 하고 새로 로그인하면 서버에서 다시 재발급해서 DB에 저장한다.

 

 

16. Django의 기본 인증을 사용하는 것과 JWT를 사용하여 로그인 기능을 구현하는 것에는 어떤 차이점이 있습니까?

서버에 인증정보를 저장하고 저장하지 않는 점

반응형