본문 바로가기
IT

OAuth2의 4 가지 흐름

by Cyber_ 2024. 12. 5.

OAuth2의 기본 개념

OAuth2는 인터넷 사용자가 비밀번호를 제공하지 않고도 다른 웹사이트의 자원에 대한 접근 권한을 제 3자 애플리케이션에 부여할 수 있는 개방형 표준입니다. 이 프로토콜은 특히 "인증(Authorization)"에 초점을 맞추고 있습니다.

  • Resource Owner(리소스 소유자): 일반적으로 서비스를 사용하는 사용자
  • Client(클라이언트): 사용자 대신 특정 API 액세스 권한을 요청하는 애플리케이션
  • Resource Server(리소스 서버): 사용자 데이터를 보유하고 있는 서버
  • Authorization Server(인증 서버): 클라이언트가 사용자를 대신해 리소스에 접근할 수 있도록 토큰을 발급하는 서버

 

OAuth 장점

개발자 관점

1. 보안 강화: OAuth를 사용하면 개발자는 사용자의 비밀번호 같은 민감한 정보를 직접 다루지 않아도 됩니다. 대신, 인증을 통해 서비스를 보호할 수 있습니다. 이는 보안 위험을 크게 줄이고, 데이터 유출 시 피해를 최소화 할 수 있습니다.

2. 서드 파티 인증

OAuth를 통해 개발자들은 Google, FaceBook, Naver와 같이 검증된 인증 시스템을 이용할 수 있습니다. 이를 통해 자체 적으로 복잡한 인증 시스템을 구축할 필요 없이, 신뢰할 수 있는 인증 방법을 쉽게 통합할 수 있습니다.

3. 접근권한관리

OAuth는 자신의 데이터에 대해 제 3자 애플리케이션에 특정한 접근 권한만을 부여할 수 있도록 합니다. 예를 들어, 앱이 사용자의 이름과 이메일 주소는 접근할 수 있지만, 다른 민감한 데이터에는 접근할 수 없게 제한할 수 있습니다.

4. 유지보수와 확장성

표준화된 OAuth 프로토콜을 사용함으로써 개발자는 보다 일관된 접근 방식으로 인증 시스템을 구축하고 유지보수할 수 있습니다. 또한, 새로운 인증 제공자나  보안 기능을 쉽게 추가할 수 있습니다.

사용자 관점

1. 사용 편의성

사용자는 여러 서비스에 동일한 인증 제공자를 사용하여 로그인할 수 있습니다. 이는 복잡한 비밀번호를 여러 개 기억할 필요 없이, 서비스 이용이 보다 편리해진다는 것을 의미합니다.

2. 개인정보 보호

사용자는 자신의 계정 정보를 직접 공유하지 않고도 서비스를 이용할 수 있습니다. OAuth를 통해 사용자는 자신이 원하는 정보만을 선택적으로 제3자에게 제공할 수 있습니다.

3. 신뢰성 향상

대형 인증 제공자들은 보통 높은 수준의 보안을 제공합니다. 사용자는 이러한 신뢰할 수 있는 제공자를 통해 다른 서비스를 이용할 때 보안에 대해 더욱 안심할 수 있습니다.

4. 권환 취소 용이성

사용자는 언제는디 제3자 애플리케이션이 자신의 데이터에 접근하는 것을 차단할 수 있습니다. 인증 제공자의 인터페이스를 통해 쉽게 접근 권한을 관리하고 취소할 수 있습니다.

 

 

OAuth2의 주요흐름

  1. Authorization Code Grant
  • 가장 일반적인 유형으로, 클라이언트가 서버러부터 인증 코드를 받아 토큰을 요청합니다. 웹 서버 애플리케이션에 적합합니다.
  • 흐름
    1) 사용자 인증 요청: 사용자가 클라이언트 애플리케이션을 통해 로그인을 시도하면, 클라이언트는 사용자를 인증 서버의 로그인 페이지로 리디렉션 합니다.
    2) 인증 및 권한 부여: 사용자가 인증 서버에서 로그인을 하고, 클라이언트에 특정 자원에 대한 접근 권한을 부여합니다.
    3) 인증 코드 수신: 인증이 성공하면, 인증 서버는 클라이언트에 인증 코드를 리디렉션을 통해 제공합니다.
    4) 액세스 토큰 요청: 클라이언트는 받은 인증 코드를 사용하여 인증 서버에 액세스 토큰을 요청합니다.
    5) 엑세스 토큰 발급: 인증 서버는 클라이언트의 요청을 검증한 후 액세스 토큰을 발급합니다.
  1. Implict Grant
    이전에는 주로 클라이언트 사이드 애플리케이션(SPA)에 사용되었지만, 보안상의 취약점으로 인해 현재는 권장되지 않습니다. 액세스 토큰이 바로 클라이언트에 전달 됩니다.
  • 흐름
    1) 사용자 인증 요청: 클라이언트가 인증 서버의 로그인 페이지로 사용자를 리디렉션합니다.
    2) 인증 및 액세스 토큰 발급: 사용자가 로그인하고 권한을 부여하면, 인증 서버는 바로 액세스 토큰을 URL을 통해 클라이언트 리디렉션합니다.
  1. Resource Owner Password Credentials Grant
    사용자의 로그인 정보(아이디, 비밀번호)를 직접 사용하여 액세스 토큰을 받습니다. 신뢰할 수 있는 애플리케이션에만 사용됩니다.

      1) 액세스 토큰 요청: 사용자는 클라이언트에 자신의 사용자 이름과 비밀번호를 제공합니다.
      2) 액세스 토큰 발급: 클라이언트는 이 자격증명을 사용하여 직접 인증 서버에 액세스 토큰을 요청하고, 인증 서버 검              증 후 토큰을 발급합니다.

  1. Client Credentials Grant
    클라이언트가 자신의 자격증명을 사용해 액세스 토큰을 얻는 방식으로, 주로 클라이언트가 사용자를 대신하여 작업을 수행할 때 사용됩니다.
    1) 액세스 토큰 요청: 클라이언트는 자신의 자격증명(클라이언트 ID와 시크릿)을 사용하여 인증 서버에 액세스 토큰을 요청합니다.
    2) 엑세스 토큰 발급: 인증 서버는 클라이언트의 자격증명을 검증하고 액세스 토큰을 발급합니다.