-
OAuth2.0에 대해서 알아보기 (with node.js)Node 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
'Node' 카테고리의 다른 글
typeORM 사용하기 (0) 2023.07.07 express 서버에서 요청한 클라이언트의 IP주소 확인하기 (1) 2023.04.23 http 통신 request의 query, params, body (with express) (0) 2023.03.25 Node.js에서 ORM 사용하기 (sequelize 기본 설정 하기) (1) 2023.03.23 patch-package 사용하여 노드 모듈 수정하기 (1) 2023.03.13