본문 바로가기
카테고리 없음

[Node.js] OAuth

by 디스코비스킷 2025. 5. 16.
반응형

 

3. 웹 인증 및 보안 기초

1. OAuth란?

OAuth: Open Authorization

"이미 사용자 정보를 가지고있는 서비스가 다른 서비스에서의 사용자의 인증을 대신해 주는 방법"

무신사 로그인

OAuth 2.0은 제3자 애플리케이션(클라이언트)이 리소스 소유자(사용자)를 대신하여 서비스 제공자(예: Google, Facebook 등)의 보호된 자원에 접근할 수 있도록 권한을 위임받는 표준 프로토콜이다.

주된 목적은 비밀번호 공유 없이 자원 접근을 허용하는 것이다.

 

2. OAuth 2.0의 구성 요소

구성 요소  설명
Resource Owner 자원 소유자, 즉 사용자
Client 사용자 자원에 접근하려는 제3자 애플리케이션
Authorization Server 인증 및 권한 부여를 담당하는 서버 (Access Token 발급)
Resource Server 보호된 자원이 있는 서버 (Access Token으로 접근 허용)

 

 

3. OAuth 2.0의 흐름 

사이트 접속

Resource Owner(사용자)가 ‘마늘마켓’(클라이언트 앱)에 접속

인증 요청

마늘마켓은 사용자가 로그인하려고 하면 Authorization Server(구글, 카카오, 네이버 등)에 인증 요청을 보냄

인증 확인

사용자는 인증 서버(구글 등)에 로그인하고, 해당 애플리케이션이 권한을 요청하는 범위를 보고 동의 여부를 확인

Authorization Code 발급

인증이 완료되면 Authorization Server는 마늘마켓에게 Authorization Code를 리다이렉트 URI를 통해 전달

Authorization Code 전달

마늘마켓은 전달받은 인가 코드를 다시 Authorization Server에 Access Token을 요청하기 위한 용도로 전송

Code 확인

Authorization Server는 이 코드가 유효한지를 확인합니다.

Access Token 발급

유효한 코드라면, Authorization Server는 마늘마켓에게 Access Token을 발급

Access Token 사용

마늘마켓은 이 토큰을 Resource Server에 전달하여 보호된 사용자 정보 요청을 보냄

Token 확인

Resource Server는 전달받은 토큰이 유효한지를 Authorization Server에 확인하거나 자체적으로 검증함

사용자 정보 응답

토큰이 유효하다면, Resource Server는 사용자의 개인정보 또는 리소스를 마늘마켓에 전달

 

클라이언트-서버로 나눠서 흐름 보기

클라이언트(Client)의 흐름

사이트 접속

사용자인 Resource Owner(곰돌이)가 마늘마켓 웹사이트(클라이언트)에 접속

인증 요청

사용자가 "네이버로 로그인" 등 소셜 로그인 버튼을 클릭하면, 클라이언트는 Authorization Server(예: 네이버, 카카오, 구글)로 인증을 요청

사용자 동의

인증 서버는 사용자에게 로그인 창과 함께, 권한 요청(프로필 정보 제공 등)에 대한 동의를 받음

Authorization Code 발급

사용자가 동의하면, 인증 서버는 일회성 Authorization Code를 클라이언트에게 전달

클라이언트 → 서버로 Code 전달

클라이언트는 받은 Authorization Code를 자체 서버(마늘마켓 서버)로 전송

 

서버(Server)의 흐름

Authorization Code → Access Token 요청

마늘마켓 서버는 받은 Authorization Code를 가지고 다시 인증 서버에 접속하여 Access Token 발급을 요청

인증 서버에서 Code 확인

인증 서버는 전달받은 Authorization Code의 유효성을 검증

Access Token 발급

인증 서버는 유효성 검증에 성공하면 마늘마켓 서버에 Access Token을 발급

Access Token → 사용자 정보 요청

마늘마켓 서버는 Access Token을 가지고 리소스 서버(구글, 카카오 등)에 사용자 정보를 요청

Token 확인

리소스 서버는 Access Token이 유효한지 검증

①① 사용자 정보 전달

리소스 서버는 사용자 프로필 정보(이메일, 이름 등)를 마늘마켓 서버에 응답

①② 사용자 정보 → 클라이언트 전달

마늘마켓 서버는 받은 사용자 정보를 클라이언트에 전달, 이후 로그인 완료 처리

 

4. 인가코드(Authorization Code)란 무엇인가요?

  • 인가코드는 클라이언트가 사용자 대신 Access Token을 받기 위해 사용하는 임시 코드이다.
  • 보안상 민감한 정보를 Access Token에 직접 포함하지 않고, 인가코드를 통해 두 단계 인증 흐름을 구현한다.
  • 브라우저를 통한 사용자 인증 완료 후, 클라이언트에 전달된다.
  • 일반적으로 짧은 유효 기간을 가진다(수 분 내).

Access Token은 서버-서버 통신에서만 주고받기 때문에, 인가코드를 거치면 보안성이 높아진다.

 

반응형

최근댓글

최근글

© Copyright 2024 ttutta