그저 내가 되었고

🎯Node.js + Oauth:: 구글 로그인 개념(w/o passport) 본문

개발/Node.js

🎯Node.js + Oauth:: 구글 로그인 개념(w/o passport)

hyuunii 2022. 11. 28. 23:04

필요 배경 지식 & 개념

* Oauth / Oauth2

웹 사이트를 이용할 때 "네이버로 로그인" 같이 별도의 회원가입 없이 로그인을 제공하는 서비스를 이용한 적이 있을 것이다.. 이때 해당 플랫폼의 아이디가 있다면 외부 서비스에서도 인증을 가능하게하고 그 서비스의 API를 사용할. 수 있다. 이것을 OAuth라고 한다. 내가 만드는 클라이언트 서버에서 다른 서버의 정보(Google, Naver, Kakao 등) 를 가지고 오고 싶을때 안전하게 가지고 오는 플로우를 제시한다. 보통은 구글,페이스북에서 많이 사용하는 Authorization Code Grant 방식을 자주 사용한다.

 

Oauth 기능은 간단히 설명해보면 아래와 같다.

  1. 어떤 사용자가 우리의 서비스를 이용하려 한다.
  2. 그런데 이 사용자가 정말 올바른 권한을 가졌는지 확인해보려고 한다.
  3. 이 때 구글 등 이미 이 사용자가 회원가입한 서비스에서 “이 고객은 우리가 신원을 보증하니 통과시켜도 됩니다.”라고 말해준다.
  4. 우리는 구글에서 신원을 인증해주니 우리의 자원들을 사용할 수 있는 권한을 부여해준다.

 

OAuth integrations, including google flow:

1. 어떤 데이터를 사용자가 우리의 앱에 줬으면 하는지, 우리의 client Id, redirect url을 포함한 인증 시스템 링크를 유저에게 제공함.

2. 유저가 링크를 누르고 우리 앱에 접근성을 획득하면, 쿼리 스트링으로 security code를 갖고 우리 앱으로 redirect될 것.

3. 시큐리티 코드는 우리 앱의 서버로 보내진다.

4.우리 앱의 서버는 시큐리티 코드, 클라이언트 아이디, 클라이언트 시크릿을 사용해서 액세스토큰과 베어러 토큰을 요청한다.

5. 액세스 토큰과 베어러 토큰은 유저의 프로필 정보를 가져오기 위해 사용됨.

6. 프로필 정보는 존재하는 유저를 내 시스템에서 확인하거나 혹은 새로운 유저를 만드는 것 둘 모두를 위해 쓰인다.

7. 마침내 유저에게 네 인증 시스템(아마도 JWT)와 맞는 토큰을 발급한다.

 

구글 회원가입 flow

1. client가 google server로 회원가입 요청 

2. google server가 idToken 전송

3. client가 서비스 서버로 idToken 전송

4. 서비스 서버가 idToken이 유효한지 google server에 검증 및 유저 데이터 요청

5. 유효한 idToken이면 user Data 전송

6. 서비스 서버가 받은 유저 데이터를 저장 및 가공 후 client에 응답