Oauth2

한상우·2022년 5월 29일
0

Oauth2란?

다른 서비스의 유저 정보를 안전하게 사용하기 위한 방법이라 할 수 있다.
유저가 자신의 아이디와 비밀번호를 우리 서비스에게 알려주지 않아도 네이버나 카카오에 있는 고객정보를 우리 서비스에서 안전하게 사용할 수 있다.

Oauth2 프로토콜에서는 여러 클라이언트 환경에 맞추어 권한 부여 방식을 4가지 종류로 구분하여 제공하고 있는데, 이번 프로젝트에서는 권한 부여 승인 코드 방식을 알아볼 예정이다.
이는 간편 로그인 기능에서 사용되는 방식으로 클라이언트(우리 서비스)가 사용자를 대신하여 특정 자원에 접근을 요청할 때 사용되는 방식이다.


페이코가 너무 잘 설명해주고 있다. 보이는 그대로 이해하면 된다.!!
하지만 처음 봤을 때는 너무 이해가 안되었기에, 하나하나 기록을 해둘 생각이다.
인증 방식은 네이버를 기준으로 공부하였다.

  1. 리다이렉트 부분은 우리가 네이버에게 알려줘야 한다. (callback url 에 적으면 된다)
  2. 우리가 앱을 등록할 때 client_id와 client_secret을 받을 건데 이게 우리 앱의 고유 번호와 비밀번호다. 이를 바탕으로 네이버도 우리가 신뢰할만한 사이트인지 판단하는 거다.
  3. 사용자가 id, pw를 맞게 입력하면 authorization code라는 것을 발급한다. (토큰이 아니다) 이 code를 가지고 우리 사이트가 네이버에 직접 토큰을 요청하는 거다.
  4. access token 요청은 3번의 authorization code와 애플리케이션 등록시 받은 client_id와 client_secret을 이용하여 발급받는다.

프로젝트에 적용

naver로 부터 access token과 refresh token을 받아 사용자를 관리할 수 있지만, 이러면 재발급할 때도 naver에게 요청해야 하고, 삭제할 때도 naver에 요청해야 한다. 같이 프로젝트 진행하는 팀원과 협의한 결과, 우리만의 인증 방식을 도입하기로 하였다.

결국 naver로 부터 고유한 유저 아이디를 받고, 유저의 성별이나 연령대 정도의 정보만 받아 DB에 저장하고, access token은 만료시킨다. 이후 우리만의 access token과 refresh token을 새로 발급하여 유저에게 전달하는 방식을 택하였다.

passport

passport 라는 인증 요청을 처리해주는 Node js 인증 미들웨어가 있다. 이는 Facebook, github, naver, kakao 등등 다양한 인증 방법을 제공하는 패키지여서 프로젝트에 처음 도입해봤다. 구현까지 완료하였지만,

너무 충격적이게도 이번 프로젝트에는 passport를 적용하지 못할거 같다.
passport를 사용하면 백엔드에서 모든것을 처리해주기에 백엔드 서버가 노출되기 때문이다..
그래서 새로운 방안을 찾아야 했다..

직접 구현

결국 naver 로그인 api 명세를 보고 직접 구현하는 방식을 택했다.

  1. 네이버 로그인 인증 요청
  2. access token 발급 요청
  3. access token 삭제 요청
  4. payload를 만들어 우리만의 token 발급

이 과정을 통해 oauth의 동작 방식에 대해 자세히 알 수 있었고, 하나하나 구현해보는 좋은 경험이 되었다

profile
안녕하세요 ^^

0개의 댓글