OAuth에 대해서 설명해주세요

면접 답변

OAuth(Open Authorization)는 사용자의 비밀번호를 공유하지 않고도, 타사 애플리케이션이 제한된 리소스에 접근할 수 있도록 하는 인증 및 권한 부여 프로토콜입니다. 주로 소셜 로그인(구글, 카카오)이나 외부 서비스 연동에 사용합니다. 다양한 역할과 인증 방법을 포함하여 유연성과 간소화된 사용자 경험을 제공하지만 보안 취약성을 방지하기 위한 구현이 필요합니다.

개념 정리

주요 구성 요소

역할

  • Resource Owner

    • 리소스 소유자 또는 사용자. 구글, 페이스북 등의 플랫폼에서 리소스를 소유하고 있는 사용자

    • 구글, 페이스북 등을 사용하여 서비스에 접근하려 하는 유저

    • OAuth 2.0는 사용자의 승인이 반드시 필요함

  • Authorization & Resource Server

    • Authorization Server

      • 클라이언트가 사용자 데이터에 접근할 수 있도록 인증을 제공

      • 승인을 받은 클라이언트에게 접근 토큰을 발행하며, 이 토큰은 클라이언트가 리소스 서버에 접근할 때 사용

    • Resource Server

      • 사용자의 데이터(리소스)를 저장하는 곳

      • 클라이언트가 이 서버를 통해 데이터에 접근함

      • 서버는 클라이언트의 요청을 받아 인증 서버로부터 받은 접근 토큰을 검증하고, 통과한 요청에 대해서만 데이터를 제공

  • Client

    • 사용자의 리소스에 접근하려는 서비스. 사용자의 명시적 승인을 통해 사용자의 리소스에 접근할 권한을 얻음 (ex:구글 로그인 동의 페이지의 사용자 정보 제공 동의 항목)

권한 부여 방식

  • 권한 부여 승인 코드 방식(보편적으로 사용되는 방식)

    • 리다이렉션을 통해 사용자 인증과 인가를 처리

    • 사용자가 신뢰할 수 있는 서버에서 인증을 받음

    • 과정: 인증요청 - 인증 - 인가 - 인증 코드 발급 - 액세스 토큰 요청 - 액세스 토큰 발급

    • 사용자 자격증명이 클라이언트에서 노출되지 않게 하여 사용자 로그인 정보를 보호함

  • 암묵적 승인 방식(Implicit Grant)

    • 클라이언트 사이드 어플리케이션에서 사용

    • 권한 부여 승인 코드 방식보다 간단함

    • 과정: 인증 요청 - 인증 - 인가 - 토큰 발급 - 리소스 요청

    • 단점: 액세스 토큰이 클라이언트에서 노출되므로 보안적으로 문제가 될 수 있음

      • CSRF(Cross-Site RequestForgery)등의 공격에 취약할 수 있기 때문에 보안을 강화하거나 다른 인증 흐름 사용이 요구됨

  • 자원 소유자 자격증명 승인 방식(Resource Owner Password Credentials Grant)

    • 사용자(리소스 소유자)의 ID와 비밀번호를 직접 사용하여 인증

    • 신뢰할 수 있는 어플리케이션에서만 사용되어야함

    • 과정: 인증 요청 - 토큰 요청 - 토큰 발급

    • 단점: 비밀번호 변경 등의 보안 조치가 취해져야 하는 상황에서 문제가 될 수 있음

  • 클라이언트 자격증명 승인 방식(Client Credentials Grant)

    • 클라이언트 자체 자격 증명을 사용하여 액세스 토큰을 얻는 방법

    • 별도의 리소스 소유자의 동의나 인증 없이 서비스를 요청할 때 유용

    • 클라이언트 서비스가 사용자를 대신하여 사용하는 경우 사용됨

    • 과정: 토큰 요청 - 토큰 발급

    • 장점 : 별도 인증 과정이 필요 없음

    • 단점 : 사용자의 리소스에 대한 액세스 권한을 제공할 수 없음

    • 클라이언트가 직접 리소스를 소유하거나 사용자 개입이 필요없는 서비스에서 사용

OAuth 1.0과 2.0 비교

OAuth 1.0 문제점

  • 복잡한 서명 방식 (HMAC-SHA1)

    • OAuth 1.0은 요청마다 서명을 생성해야함

  • Access Token 발급 절차의 복잡성

    • Request Token → Authorization → Access Token

  • 보안성 문제

    • Access Token을 평문으로 전달 → 탈취가능성 있음

OAuth 2.0

  • 단순화된 인증 흐름

    • 복잡한 서명 생성 방식(HMAC-SHA1) 제거

    • Authorization 헤더를 통해 Access Token을 전달 → 구현이 간편함

    • Access Token을 Base64로 인코딩된 Bearer Token 방식으로 전달

  • SSL/TLS를 통한 보안 강화

    • 민감한 정보가 평문으로 노출되지 않으며, Access Token도 안전하게 전달됨

    • 기본적으로 HTTPS를 사용하도록 권장

  • Access Token과 Refresh Token으로 권한 관리 효율화

    • Access Token은 짧은 만료 시간을 통해 보안성을 강화

    • Refresh Token은 만료된 Access Token을 갱신할 수 있음

꼬리 질문

  • OAuth의 흐름을 설명해주세요

  • OAuth 토큰의 종류와 용도, 사용 방식에 대해 설명해주세요

  • OAuth 2.0에서 Access Token과 Refresh Token의 차이점은 무엇인가요?

Last updated