Login Process

EricHan·2022년 8월 23일
0

우리가 밥먹듯이 하는 로그인 기능

개발 공부를 하기 전까지만 해도 그냥 단순한 구멍 맞는 자물쇠에 열쇠를 끼워놓고 돌리는 행위 정도로 생각했었는데, 막상 원리와 과정 그리고 api를 만들고 보니 되게 복잡하고 정교한 기능이였다.

로그인 프로세스를 이해하기 위해서는 우선

인증(Authentication)과 인가(Authorization)이 무엇인지 알아야 한다.

내가 이해한 로그인 프로세스에서 인증(Authentication)이란

쉽게 설명해서 대중 목욕탕을 들어갈 때 key를 받고 들어가는 것과 비슷한 원리로써

로그인을 하면 저장소로부터 토큰을 받아오는 과정

즉, 특정 서비스 로그인을 하게 되면 그 대상이 누구인지 인식하기 위해 고유값을 받는 과정이라고 이해했다.

그리고

인가(Authorization)란 특정 권한을 부여하는 과정 혹은
유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가를 확인하는 절차이다.

굳이 또 빗대어 설명하자면...(사실 내가 좀 더 잘 이해하기 위해서 ㅋㅋ)
목욕탕에 출입한 사람이 남성인지 여성인지 손님인지 직원인지에 따라 목욕탕에서 입장하면 누릴 수 있는 권한이 서로 다르듯이

인가는 출입한 유저에 따라 권한을 부여(허락)하는 과정 이다.

그렇다면 이러한 인증과 인가 과정을 어떻게 로그인 프로세스에 적용 시킬까?

그 때 사용 되는 것이 바로 JWT(JSON Web Tokens)이다.

(존맛탱 아님...)

JWT 토큰을 사용하게 되면 인증과정에서 유저의 정보를 담은 객체를 문자열로 만들어 암호화한 후 암호화된 고유의 키(accessToken)를 브라우저에 줄 수 있게 된다.

이렇게 accessToken이 발급되면 유저는 특정한 기능을 실행 시킬 때 인가 과정을 거치는데

JWT를 쓰게 되면 서버가 로그인을 할 때 등록한 유저의 정보를 바탕으로 유저의 권한(permission)도 확인 할 수 있게 된다.

인가 부분이 처음에는 인증보다 더 이해가 되지 않아 좀 더 디테일하게 절차를 확인해보았다.

  1. 인증을 통해 accesstoken 생성
    (accesstoken을 생성 하기 위해서 유저가 어떤 사람인지 확인 할 수 있는 정보를 입력해줘야함)

  2. 생성된 accesstoken을 서버에 request를 보내게 되면 서버는 유저가 보낸 accesstoken을 다시 복호화 한다.
    *복호화는 암호화의 반대과정으로써 암호를 해독하는 과정을 말함

  3. 복호화된 데이터에는 유저 정보 (예를 들면 User_id)를 확인 할 수 있다.

  4. 확인한 User_id 데이터베이스에서 그 유저가 어떠한 권한을 가지고 있는지 확인하는 용도로 사용된다.

  5. 유저가 가지고 있는 권한에 따라 유저가 보내온 요청을 처리한다.

  6. 만약 유저가 특정 서비스에 대한 권한을 가지고 있지 않다면 에러코드를 보내 줄 수 있다.

추가적으로 JWT에는 accesstoken을 발급하는 것 외에도 refreshtoken을 발급 할 수 있는데, refreshtoken의 용도는
accesstoken 발급해주는 api를 짤 때 만료기간을 설정 할 수 있는데, 만약 지정해둔 만료기간을 짧게 설정 해둘 경우

refresh token 기능을 설정 하여 사용자가 다시 처음부터 a토큰을 발급 받지 않더라도 그 기능을 사용해서 다시 새로운 토큰을 재발급 받도록 해주는 용도이다.

물론 이렇게 되면 보안상에 문제가 있을 수 있기 때문에 refreshtokne은 데이터베이스에는 직접 저장되지 않고 일반적으로 브라우저의 쿠키에 임시 저장 된다.

(주로 로그인 시간이 짧은 서비스에서 로그인 시간을 연장 시키는 용도로 사용 되는듯 하다)

profile
desarollitor

0개의 댓글