Node

OAuth2.0에 대해서 알아보기 (with node.js)

citron031 2023. 4. 7. 22:33
  • Oauth는 우리가 흔히 볼 수 있는 소셜 로그인의 인증 방식이다.
  • 🍉 카카오, 구글, 깃허브, 네이버 아이디 등을 이용한 로그인이 Oauth를 통해서 구현되어있다.
  • 🍉 Oauth(Open Authorization)는 인증을 중개해준다.
  • 이미 사용자의 서비스를 가지고 있는 웹서비스에서 대신 사용자에 대한 인증을 해주고, 이를 통해서 접근 권한에 대한 토큰을 받아 서버에 접근할 수 있게 된다.
  • Oauth2.0는 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화한 표준 프로토콜의 한 종류이다.
  • 또한, OAuth를 이용하여 서버에서 사용자 관리에 대한 부담을 줄일 수 있다.
  • 🍸 OAuth 없이 사용자 인증을 구현한다면, 회원가입 관리, 비밀번호 변경, 회원정보 변경, 이메일  인증, 로그인 보안 등의 절차를 모두 스스로 구현해야 한다.

🥧 Authentication과 Authorization

  • Authentication(인증)은 로그인과 같이 사용자가 누구인지, 인증된 사용자인지 확인하는 과정이다.
  • Authorization(권한 부여)는 인증된 사용자에게 서비스에 대한 접근 권한을 부여하여 보안된 리소스에 접근할 권한을 확인한다.
  • OAuth는 Authentication을 지원해주지만, Authorization는 서버에서 관리해야 한다.
  • OAuth를 사용함으로써, 사용자는 하나의 계정으로 여러 웹 app을 사용할 수 있고, 검증되지 않은 App에서 OAuth로 중계하여 인증함으로써, 보안에 더 안전할 수 있다.


☕️ OAuth와 관련된 용어들

  •  Resource Owner
    • 액세스 중인 resource의 사용자입니다.
    • 자신의 구글 계정을 이용하여 App에 로그인할 경우, 이때 Resource owner은 내가 된다.
  • Client
    • Resource owner를 대신하여 보호된 리소스에 액세스하는 응용프로그램이다.
    • 클라이언트는 서버, 데스크탑, 모바일 또는 기타 장치에서 호스팅할 수 있다.
  • Resource server
    • client의 요청을 수락하고 응답할 수 있는 서버이다.
  • Authorization server
    • Resource server가 액세스 토큰을 발급받는 서버이다.
    • 즉, 클라이언트 및 리소스 소유자를 성공적으로 인증한 후 액세스 토큰을 발급하는 서버를 뜻한다.
  • Authorization grant
    • 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명의 유형이다.
    • grant type은 클라이언트 app이 액세스 토큰을 얻는 방법을 의미한다.
    • Authorization code grant type과 Refresh token grant type이 있다.
    • Authorization code grant type은 액세스 토큰을 받아오기 위해서 먼저 authorization code를 받아 액세스 토큰과 교환하는 방법이다. 이 과정을 거침으로써 보안성을 강화한다.
    • Refresh token grant type은 access token이 만료되었을 때, 새로운 access token을 발급하는 데 쓰인다.
  • Authorization code
    • access token을 발급받기 전에 필요한 code다.
    • client ID로 이 code를 받아온 후, client secret과 code를 이용해 Access token을 받아온다.
  • Access token
    • 보호된 리소스에 액세스하는 데 사용되는 credentials다. Authorization code와 client secret을 이용해 받아온 이 Access token으로 이제 resource server에 접근을 할 수 있다.
  • Scope
    • scope는 토큰의 권한을 정의한다.
    • 주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스의 범위를 의미한다.
    • 예시로, Google API의 scope는 다음과 같다.

https://developers.google.com/identity/protocols/oauth2/scopes?hl=ko 

 

Google API의 OAuth 2.0 범위  |  Authorization  |  Google Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 Google API의 OAuth 2.0 범위 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이

developers.google.com

 

express에서 사용할 수 있는 인증 미들웨어인 passport는 다양한 oauth 관련 패키지를 제공하는데, 이를 통해서 passport에 간단히 oauth2.0 인증을 구현할 수 있다.

https://www.passportjs.org/packages/

위의 공식 문서에서 원하는 STRATEGIES를 찾아 적용할 수 있다.

예를 들면 구글, 페이스북, 애플 로그인부터 카카오, 네이버까지 다양한 패키지를 사용하여 Oauth2.0 인증을 구현할 수 있다.

 

물론, 패키지를 사용하지 않고도 구현할 수 있다.

구글의 예를 들면, 다음과 같이 친절하게 공식 문서를 확인할 수 있다.

Node.js를 포함한 다양한 환경, 언어에 대해서 예시 코드가 제공된다.

 

https://developers.google.com/identity/protocols/oauth2/web-server?hl=ko#node.js_5 

 

웹 서버 애플리케이션용 OAuth 2.0 사용  |  Authorization  |  Google Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 웹 서버 애플리케이션용 OAuth 2.0 사용 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분

developers.google.com

 

카카오나 네이버역시 관련된 공식 문서가 제공되니, 문서를 보고 직접 구현할 수도 있겠다.

https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#kakaologin

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

https://developers.naver.com/docs/login/api/api.md#node-js

 

네이버 로그인 API 명세 - LOGIN

네이버 로그인 API 명세 네이버 로그인 API는 네이버 로그인 인증 요청 API, 접근 토큰 발급/갱신/삭제 요청API로 구성되어 있습니다. 네이버 로그인 인증 요청 API는 여러분의 웹 또는 앱에 네이버

developers.naver.com