본문 바로가기
React

React에서 OAuth 2.0 사용하기

by 굿센스굿 2024. 12. 17.
반응형

 

OAuth 2.0은 안전하고 효율적으로 사용자 인증 및 권한 부여를 처리하는 표준 프로토콜입니다. React 애플리케이션에서는 Google, Facebook, GitHub 등의 서비스를 통해 OAuth 2.0을 쉽게 구현할 수 있습니다. 이 글에서는 OAuth 2.0의 기본 개념 React에서 OAuth 2.0을 구현하는 방법을 단계별로 설명하겠습니다.


1. OAuth 2.0 기본 개념

OAuth 2.0은 외부 애플리케이션이 사용자 대신 특정 리소스에 접근할 수 있도록 권한을 위임하는 프로토콜입니다. 예를 들어, React 애플리케이션이 사용자의 Google 계정 정보를 가져오는 경우 OAuth 2.0을 사용해 인증할 수 있습니다.

1.1 주요 용어

  1. 리소스 소유자 (Resource Owner): 인증을 요청하는 사용자입니다.
  2. 클라이언트 (Client): 인증을 요청하는 React 애플리케이션입니다.
  3. 인증 서버 (Authorization Server): 사용자 인증 및 토큰을 발급하는 서버입니다.
  4. 리소스 서버 (Resource Server): 보호된 리소스를 제공하는 서버입니다.
  5. 액세스 토큰 (Access Token): 클라이언트가 리소스에 접근할 수 있도록 인증된 토큰입니다.

1.2 OAuth 2.0의 흐름

  1. 사용자가 클라이언트(React 앱)에 로그인 요청.
  2. 클라이언트는 인증 서버로 리다이렉트해 사용자 인증 요청.
  3. 인증 서버가 사용자를 인증한 후, 액세스 토큰을 클라이언트에 반환.
  4. 클라이언트는 액세스 토큰을 사용해 리소스 서버에서 보호된 데이터를 요청.

2. React에서 OAuth 2.0 구현하기

React에서 OAuth 2.0을 구현하기 위해서는 클라이언트 라이브러리를 사용하면 편리합니다. 여기서는 react-oauth/google 라이브러리를 사용해 Google OAuth를 예제로 설명하겠습니다.

2.1 프로젝트 준비

  1. React 프로젝트를 생성합니다:
npx create-react-app react-oauth-example
cd react-oauth-example
  1. Google OAuth 라이브러리를 설치합니다:
npm install @react-oauth/google
  1. Google Cloud Console에서 OAuth 클라이언트 ID를 생성합니다.
    • 새 프로젝트를 생성하고 APIs & Services > Credentials로 이동합니다.
    • OAuth 클라이언트 ID를 생성하고 client_id를 복사합니다.

2.2 Google OAuth 설정하기

Google OAuth를 설정하려면 GoogleOAuthProvider로 클라이언트 ID를 제공하고, 로그인 버튼을 추가합니다.

App.js 설정:

import React from 'react';
import { GoogleOAuthProvider, GoogleLogin } from '@react-oauth/google';

function App() {
  const handleSuccess = (credentialResponse) => {
    console.log("Success: ", credentialResponse);
  };

  const handleError = () => {
    console.log("Login Failed");
  };

  return (
    <GoogleOAuthProvider clientId="YOUR_GOOGLE_CLIENT_ID">
      <div style={{ textAlign: 'center', marginTop: '50px' }}>
        <h1>React Google OAuth 2.0 예제</h1>
        <GoogleLogin
          onSuccess={handleSuccess}
          onError={handleError}
        />
      </div>
    </GoogleOAuthProvider>
  );
}

export default App;

2.3 Google OAuth 작동 원리

  1. GoogleOAuthProvider: OAuth 클라이언트 ID를 애플리케이션에 제공합니다.
  2. GoogleLogin: 로그인 버튼을 렌더링하고 사용자 인증을 수행합니다.
  3. handleSuccess: 인증에 성공하면 반환된 credentialResponse에 액세스 토큰이 포함됩니다.
  4. handleError: 인증에 실패했을 때 호출되는 콜백입니다.

3. 액세스 토큰을 활용한 데이터 요청

인증이 성공하면 액세스 토큰을 활용해 보호된 데이터에 접근할 수 있습니다. 예를 들어, Google의 사용자 정보를 요청하려면 fetch를 사용하면 됩니다.

사용자 정보 요청 예제

const handleSuccess = (credentialResponse) => {
  const token = credentialResponse.credential;

  fetch('https://www.googleapis.com/oauth2/v3/userinfo', {
    headers: {
      Authorization: `Bearer ${token}`,
    },
  })
    .then((response) => response.json())
    .then((data) => console.log("User Info: ", data))
    .catch((error) => console.error("Error: ", error));
};

위의 코드에서:

  • 액세스 토큰을 Authorization 헤더에 추가하여 보호된 리소스를 요청합니다.
  • Google OAuth로 인증된 사용자의 정보를 받아올 수 있습니다.

4. 보안 고려 사항

OAuth 2.0을 구현할 때 보안을 위해 다음 사항을 고려해야 합니다:

  1. 액세스 토큰 노출 방지: 토큰은 반드시 안전하게 관리해야 합니다.
  2. HTTPS 사용: 모든 요청은 HTTPS를 통해 전송해야 합니다.
  3. 토큰 유효성 검사: 서버에서 토큰의 만료 여부를 확인해야 합니다.
  4. 로그아웃 구현: 사용자가 로그아웃할 수 있도록 상태를 관리해야 합니다.

결론

React 애플리케이션에서 OAuth 2.0을 구현하면 외부 서비스와의 인증 및 데이터 연동을 쉽게 처리할 수 있습니다. 이 글에서는 Google OAuth 2.0을 예제로 설명했지만, Facebook, GitHub 등 다른 플랫폼에도 동일한 원리를 적용할 수 있습니다.

  1. Google OAuth 설정: @react-oauth/google 라이브러리를 활용.
  2. 액세스 토큰: 성공적으로 인증된 후 보호된 리소스를 요청.
  3. 보안 강화: HTTPS와 토큰 관리를 통해 안전한 인증 시스템 유지.

위의 예제를 참고하여 React 프로젝트에 OAuth 2.0을 구현해 보세요!

반응형