솔적솔적

Session, JWT, OAuth 등 이해하기 본문

Front-end/Session, Token, Open Authentication 방식

Session, JWT, OAuth 등 이해하기

솔솔봄향기 2022. 9. 13. 19:46

세션인, jwt이나 여러 인증방법이 있는데 이걸 들었을 때

서버에 요청을하고~ 브라우저에 저장하고~ 요청할 때는~ 에구궁에구궁.. 

session방식과 JWT방식등이 헷갈려지지않게

딱 정리하여 기록하는 것이 좋겠다 싶어 오늘도 솔적솔적해보려한다.

너무 깊이 말고 간단한 이해를 목표로하여 알아가도록하자.

 

| 1. session-based

어떤 사람이 로그인페이지에서 로그인을 한다. 그러면 서버는 쿠키를 발행한다.

쿠키가 뭐냐면 브라우저에 몰래 저장할 수 있는 긴 문자 저장공간.

문자들을 차례차례 저장할 수 있다.

 

문자열을 만들어서 보낸다.  그 문자열에는 세션아이디가 적혀있다.

 

이 유저가 로그인을 하자마자  이 유저가 지금 로그인을 했다라는 정보를 서버 메모리에 저장을 한다.

저장이 됐다하면 쿠키로 만들어서 브라우저한테 보내고 브라우저는 쿠키를 저장한다;

 

그럼 이제 로그인을 한 상태고 로그인을 한 사람만 이용하는 마이페이지를 보려고 접속요청을 하겠지.

 

로그인한 사람만 이용할 수 있는 마이페이지를 보려면 쿠키 데이터가 서버한테 자동으로 전송한다.

 

그러면 사용자의 세션아이디가 쿠키안에 들어있는데 이 아이디를 바탕으로 세션데이터에 아이디를 찾는다.

만약 이 세션데이터안에 유저의 아이디가 있다면 마이페이지를 유저에게 갖다주는 것이 session-based-Authentication

이다.

큰 특징은 이 사용자가 로그인을 했다는 정보를 서버에 다 저장을 한다. 그게 장점이자, 단점임.

 

 

| 2. Token-based(JWT)

어떤 사람이 로그인을 한다치자, 그러면 서버에 전송이 되고 서버에서는 웹토큰이라는 것을 발행해준다. 

이 사람이 맞는 비밀번호, 아이디를 입력을 하였다하면 JSON WEB TOKEN이라는 것을 발행하여 브라우저한테 전송을 한다. (웹토큰은 암호화된 긴 문자열) 

 

그럼 이 토큰을 브라우저한테 전송을하는데 브라우저는 쿠키 아니면 localStorage에 저장을 한다.

이 사람이 이후 마이페이지에 접속요청을 한다고 가정해보자.

 

그럼 서버는 이 사람이 로그인을 했나안했나 판단을 해야하는데, 이럴 때 로그인을 한 사람은 웹토큰을 가지고 

서버한테 요청을 할 때 웹토큰을 header라는 곳에 포함을 하여 전송을 한다.

요청할 때마다 같이 웹토큰도 전송을 한다는 것.

 

그럼 서버는 어? 이사람이 마이페이지 접속요청을 했구만? 근데 웹토큰까지 전송을 했군? 그럼 이 웹토큰을 검사하여 적합한 토큰인지 알아봐야겠군. 확인했을 때 적합하다, 토큰이 유효한지 확인했다하면 마이페이지를 갖다주는 것이다.

 

이런 식으로 인증을 해주는 것이 토큰베이스 방식, 

토큰이라는 글자가 보이면 거의 다 이런 방식으로 진행된다.

 

웹토큰 방식의 가장 큰 특징은 서버가 메모리같은 공간에 사용자가 로그인했다라는 정보를 저장하지않고

(유저들 로그인 상태를 저장할 필요없음)

로그인했다라는 정보를 웹토큰으로해서 브라우저에 보내는 것, 

사용자는 이걸 이용해서 원하는 페이지를 접속하는 열쇠를 가지고 있게되는 것이다.

 

옛날에 REST 원칙 중 서버는 stateless해야한다라는 것과 비슷한 것이, 서버가 이사람이 로그인했다라는 정보를 저장하지 않으니 좀 더 restfull한 서버를 만들 수 있다.

 

이 두개가 거의 사용하는 방식이고, 

 

마지막 세 번째인 Open Authentication (OAuth)을 알아보자

| 3. Open Authentication (OAuth)

다른 사이트에서 프로필 정보를 가져오는 것이다. 

페이스북인, 구글에서 내가  너희의 프로필정보를 가져와도될까? 물어보고 허락한다면 이 사람의 구글이메일, 이름 등을 그대로 갖다가 내 사이트에 사용할 수 있게, 접근권한을 줄 수 있게 하는 것이 OAuth.

 

이게 무슨 말이람? 이라고 생각이 들 수 있지만 다들 한 번쯤 보지 않았다면 간첩인 걸 의심해봐야한다.

요런거요런거
요런거 있자나요런거

그래서 동작방식은 되게 심플해보인다.

이 사람이 위의 버튼을 누르면 구글이나 페이스북 팝업이 뜬다. 

구글 계정 정보를 제공하는 것에 동의합니까? 하는 팝업이. 이것을 동의한다면

이메일이나 이름 등등의 정보들이 내 서버로 전송이된다.

이걸 받아와서 이 사람의 계정을 만들거나 jwt를 발급, 세션만들면된다.

 

이것의 장점은 서버입장에서는 비밀번호를 다룰 일이 없는 것. 버튼 하나만 누르면 로그인 까지 완료가되는 것.

이것의 가장 큰 단점은 옛 소셜로그인이 많았었는데 없어진 사이트들이 많아 난감해질 수 있다는 것.