카테고리 없음

토큰이 필요한 이유와 JWT 동작 방식

z.zzz 2023. 9. 21. 18:09

토큰이 필요한 이유

만약 인증 서버가 JSON 객체를 토큰으로 변환하지 않고 일반 JSON으로 보낸다면?

클라이언트 애플리케이션의 API는 전송받을 콘텐츠가 올바른지 확인 불가능

악의적인 공격자가 사용자 ID를 변경할 수도 있다.

그러나 애플리케이션의 API는 그런 일이 발생했는지 알 수 없다.

* 인증서버 : 인증된 클라이언트만 접근을 허용한다.

 

이러한 보안 문제 때문에 인증 서버는 클라이언트 애플리케이션에서 확인할 수 있는 방식으로 정보를 전송해야한다.

이때 '토큰'을 사용하는 것이다.

 

인증(Authentication)과 인가(Authorization)

인증

사용자의 신원을 검증한다.

id와 pw로 로그인하는 행위가 인증에 해당한다.

 

인가

인증 이후의 프로세스로, 사용자의 엑세스 권한을 허용/거부하는 행위다.

내가 어떠한 권한을 가진 상태에서만 서버에 요청 가능한 활동들이 인가가 필요한 활동들이다.

예) 관리자 권한을 부여받음으로써 관리자 페이지에 접근 가능, 사무실에 들어가기 위해 카드키 등 

서버는 사용자의 토큰을 보고 권한이 있는지 판단한다.

 

JWT 동작 방식

1. 사용자가 id, pw를 입력하며 로그인을 요청한다.

2. 서버는 DB에 회원이 존재하는지 확인한다. 존재하는 회원이라면 서버는 token을 생성해서 사용자에게 전송한다.

3. 로그인에 성공했다면(인증), 사용자는 이후 요청에 token을 실어서 보낸다.

4. 서버는 요청과 함께 온 token을 검증하며 권한을 확인한다. 권한 확인이 끝나면 요청된 데이터를 응답한다.(인가)

token 검증 과정

4번 과정에서 서버는 token이 유효한지 검증해야 하니까 세션처럼 로그인한 유저의 정보를 모두 저장하고 있어야 하는거 아닌가?라는 의문이 들어 token 검증 과정을 찾아봤다.