본문 바로가기
기술면접

JWT, 토큰인증, OAuth

by 해룸 2024. 4. 2.

JWT, Refresh, Access Token에 대해서 설명해주세요.

보통 서버가 클라이언트 인증을 확인하는 방식은 대표적으로 쿠키, 세션, 토큰 3가지 방식이 있다.

토큰 기반 인증 시스템은 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 토큰을 부여한다. 기존의 세션기반 인증은 서버가 파일이나 데이터베이스에 세션정보를 가지고 있어야하고 이를 조회하는 과정이 필요하기 때문에 많은 오버헤드가 발생한다. 하지만 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기때문에 메모리나 스토리지 등 을 통해 세션을 관리했던 서버의 부담을 줄여준다. 

 

JWT(JSON Web Token)

인증에 필요한 정보들을 암호화시킨 JSON 토큰

JWT 기반 인증은 JWT토큰을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다.

토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명(Secret key)도 들어있다. 따라서 사용자가 JWT를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며 검증이 완료되면 요청한 응답을 돌려준다.

.을 구분자로 세가지 문자열을 조합한다. 

payload에는 외부에 공개되도 상관없지만 해당 유저를 특정할 수 있는 정보들을 담는다.

헤더와 페이로드는 단순히 인코딩된 값이기 때문에 제 3자가 복호화 및 조작할 수 있지만, signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할수없다. 따라서 signature는 토큰의 위변조 여부를 확인하는데 사용된다.

 

jwt에는 토큰탈취의 위험성이 있기때문에, 그대로 사용하는것이 아니라 access Token, Refresh Token으로 이중으로 나누어 인증하는 방식을 사용한다.

둘 다 똑같은 jwt이지만 토큰이 어디에 저장되고 관리되느냐에 따라 달리 구분한다.

 

1. Access Token: 클라이언트가 갖고있는데 실제로 유저의 정보가 담긴 토큰. 클라이언트에서 요청이 오면 서버에서 해당 토큰에 있는 정보를 활용해 사용자 정보에 맞게 응답을 진행한다.

2. Refresh Token: 새로운 Access Token을 발급해주기 위해 사용하는 토큰. 짧은 수명을 가지는 Access Token에게 새로운 토큰을 발급해주기 위해 사용한다. 보통 데이터베이스에 유저 정보와 같이 기록된다.

 

OAuth에 대해서 설명해주세요.

OAuth는 인터넷 사용자들이 비밀번호를 제공하지않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.

간편하게 로그인할 수 있을뿐 아니라, 연동되는 외부 웹 어플리케이션에서 제공하는 기능을 간편하게 사용할 수 있다는 장점이 있다.

 

소셜 미디어로 로그인을 할 경우, client는 Resouce Owner를 대신해 로그인하는데, 이때 필요한 정보를 리소스 서버에서 얻어 서로 비교해 유효성을 판단한다. 대신 로그인을 시켜주는것이다.

 

OAuth의 목적은 최종적으로 Access Token을 발급하는것이다.

 

1. 사용자는 서비스를 이용하기 위해 로그인 페이지에 접근

2. sns 로그인 버튼을 클릭 

3. 특정한 url이 해당 서버(ex.카카오톡)쪽으로 보내지게 된다.(브라우저 response 헤더를 확인하면 url 확인가능)

    redirect_uri경로를 통해 리소스 서버는 클라이언트에게 임시 비밀번호인 authorization code를 제공한다.

4. 클라이언트로부터 보낸 서비스 정보와, 리소스 로그인 서버에 등록된 서비스 정보를 비교한다.

    확인이 완료되면 리소서 서버로 부터 전용 로그인 페이지로 이동해 사용자에게 보여준다.

5. 로그인을 하면, 사용하려는 기능에 대해 동의를 요청한다.

    동의 버튼을 누르면 권한을 위임했다는 승인이 리소스 서버에 전달된다.

6. 리소스 서버도 클라이언트에게 권한 승인을 하기 위해 authorization code를 redirect url을 통해 사용자에게 응답하고 

    다시 사용자는 그대로 클라이언트에게 보낸다.

7. 리소스서버는 클라이언트가 전달한 정보들을 비교해 일치한다면, access token을 발급한다. 그리고 필요없어진 authorizaiton code는 지운다.

8. 로그인 완료!

 

 

더 알아볼것

OAuth 1.0과 2.0 둘의 방식이 다름 한번 찾아보기

대칭암호화 비대칭암호화

OAuth가 왜 나왔느냐?