OAuth 2.0의 인증 플로우와 OpenID Connect 차이점
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
OAuth 2.0은 인터넷 애플리케이션에서 인증 및 권한 부여를 처리하는 표준 프로토콜로, 사용자가 자신의 자격 증명을 제3자 애플리케이션과 공유하지 않고도 리소스에 안전하게 접근할 수 있게 합니다. OpenID Connect는 OAuth 2.0을 기반으로 사용자 인증(Authentication)을 위한 프로토콜입니다. 이 글에서는 OAuth 2.0의 주요 인증 플로우를 설명하고, OpenID Connect와의 차이점을 살펴보겠습니다.
OAuth 2.0의 기본 개념
OAuth 2.0은 권한 부여 프레임워크로, 사용자와 자원의 소유자가 클라이언트 애플리케이션에 제한된 접근 권한을 부여할 수 있도록 합니다. OAuth 2.0은 인증(Authentication)보다는 권한 부여(Authorization)에 초점을 맞추고 있으며, 사용자의 자격 증명을 직접 노출하지 않고도 애플리케이션이 리소스 서버에 안전하게 접근할 수 있게 합니다.
주요 용어:
- 리소스 소유자(Resource Owner): 접근 권한을 부여할 수 있는 사용자 또는 애플리케이션.
- 클라이언트(Client): 리소스에 접근하려는 애플리케이션.
- 리소스 서버(Resource Server): 보호된 리소스를 호스팅하는 서버. 예: API 서버.
- 권한 부여 서버(Authorization Server): 사용자를 인증하고, 접근 토큰(Access Token)을 발급하는 서버.
OAuth 2.0의 인증 플로우
OAuth 2.0은 다양한 시나리오에 맞게 여러 가지 인증 플로우(Authorization Grant)를 제공합니다. 주요 플로우는 다음과 같습니다:
1. 권한 부여 코드 그랜트(Authorization Code Grant)
흐름: 가장 일반적으로 사용되는 플로우로, 주로 서버사이드 애플리케이션에서 사용됩니다. 클라이언트는 리소스 소유자(사용자)로부터 권한 부여 코드를 받아, 이를 통해 접근 토큰을 얻습니다.
과정:
- 사용자가 권한 부여 서버에 로그인하여 권한 부여 코드 발급을 승인합니다.
- 클라이언트가 권한 부여 코드를 받아, 이를 권한 부여 서버에 제출하여 접근 토큰을 발급받습니다.
- 클라이언트는 접근 토큰을 사용하여 리소스 서버에 요청을 보냅니다.
사용자 -> 권한 부여 서버: 권한 부여 코드 요청
권한 부여 서버 -> 사용자: 권한 부여 코드 발급
클라이언트 -> 권한 부여 서버: 접근 토큰 요청
권한 부여 서버 -> 클라이언트: 접근 토큰 발급
클라이언트 -> 리소스 서버: 접근 토큰으로 리소스 요청
2. 암시적 그랜트(Implicit Grant)
흐름: 주로 자바스크립트 기반의 클라이언트 애플리케이션에서 사용됩니다. 접근 토큰이 직접 발급되며, 권한 부여 코드 단계가 생략됩니다.
과정:
- 사용자가 권한 부여 서버에 로그인하여 접근 토큰 발급을 승인합니다.
- 클라이언트는 접근 토큰을 받아, 이를 통해 리소스 서버에 요청을 보냅니다.
사용자 -> 권한 부여 서버: 접근 토큰 요청
권한 부여 서버 -> 클라이언트: 접근 토큰 발급
클라이언트 -> 리소스 서버: 접근 토큰으로 리소스 요청
3. 자원 소유자 비밀번호 자격 증명 그랜트(Resource Owner Password Credentials Grant)
흐름: 사용자가 클라이언트에게 자신의 사용자 이름과 비밀번호를 제공하는 방식입니다. 주로 신뢰할 수 있는 애플리케이션에서 사용되며, 보안상의 이유로 권장되지 않습니다.
과정:
- 사용자가 클라이언트에 사용자 이름과 비밀번호를 제공합니다.
- 클라이언트가 이 자격 증명을 권한 부여 서버에 전달하여 접근 토큰을 발급받습니다.
- 클라이언트는 접근 토큰을 사용하여 리소스 서버에 요청을 보냅니다.
사용자 -> 클라이언트: 사용자 이름과 비밀번호 제공
클라이언트 -> 권한 부여 서버: 접근 토큰 요청
권한 부여 서버 -> 클라이언트: 접근 토큰 발급
클라이언트 -> 리소스 서버: 접근 토큰으로 리소스 요청
4. 클라이언트 자격 증명 그랜트(Client Credentials Grant)
흐름: 애플리케이션 자체가 인증을 받아야 하는 서버 간 통신에서 사용됩니다. 사용자가 관여하지 않고, 클라이언트 자격 증명을 통해 접근 토큰이 발급됩니다.
과정:
- 클라이언트가 자신의 자격 증명을 권한 부여 서버에 제출합니다.
- 권한 부여 서버는 클라이언트에게 접근 토큰을 발급합니다.
- 클라이언트는 접근 토큰을 사용하여 리소스 서버에 요청을 보냅니다.
클라이언트 -> 권한 부여 서버: 접근 토큰 요청
권한 부여 서버 -> 클라이언트: 접근 토큰 발급
클라이언트 -> 리소스 서버: 접근 토큰으로 리소스 요청
OpenID Connect란?
OpenID Connect는 OAuth 2.0을 기반으로 사용자 인증을 위한 프로토콜입니다. OAuth 2.0이 주로 권한 부여에 집중하는 반면, OpenID Connect는 사용자 인증을 다루며, OAuth 2.0의 위에 사용자 인증 계층을 추가한 것입니다.
주요 특징:
- ID 토큰(ID Token): OpenID Connect는 OAuth 2.0에서 제공되는 접근 토큰 외에도 ID 토큰을 발급합니다. ID 토큰은 JWT(JSON Web Token) 형식으로, 인증된 사용자의 정보(예: 사용자 ID, 발급자, 유효기간 등)를 포함합니다.
- 표준화된 사용자 정보 제공: OpenID Connect는 표준화된 방식으로 사용자의 프로필 정보를 제공하는 엔드포인트를 정의합니다. 이를 통해 클라이언트는 사용자의 인증 상태와 프로필 정보를 쉽게 얻을 수 있습니다.
OpenID Connect의 인증 흐름:
OpenID Connect의 인증 흐름은 OAuth 2.0의 권한 부여 코드 그랜트 플로우와 유사하지만, 추가로 ID 토큰이 발급됩니다.
사용자 -> 권한 부여 서버: 권한 부여 코드 요청 (OpenID Scope 포함)
권한 부여 서버 -> 사용자: 권한 부여 코드 발급
클라이언트 -> 권한 부여 서버: 접근 토큰 및 ID 토큰 요청
권한 부여 서버 -> 클라이언트: 접근 토큰 및 ID 토큰 발급
클라이언트 -> 리소스 서버: 접근 토큰으로 리소스 요청
OAuth 2.0과 OpenID Connect의 차이점
- 목적:
OAuth 2.0: 주로 권한 부여에 중점을 두며, 사용자가 자신의 자격 증명을 제공하지 않고 제3자 애플리케이션이 리소스에 접근할 수 있도록 합니다.
OpenID Connect: OAuth 2.0을 기반으로 사용자 인증을 처리합니다. 즉, 사용자가 누구인지 확인하고, 인증된 사용자 정보를 클라이언트에 제공하는 데 중점을 둡니다. - 토큰 종류:
OAuth 2.0: 접근 토큰(Access Token)을 발급하여 리소스 서버에 대한 접근 권한을 부여합니다.
OpenID Connect: 접근 토큰 외에도 ID 토큰(ID Token)을 발급하여 사용자 인증 정보를 제공합니다. - 사용 사례:
OAuth 2.0: 사용자가 자신의 리소스(예: Google Drive 파일, Facebook 프로필 데이터 등)에 제3자 애플리케이션이 접근할 수 있도록 권한을 부여하는 시나리오에서 사용됩니다.
OpenID Connect: 사용자가 애플리케이션에 로그인하고 인증 정보를 공유하는 시나리오에서 사용됩니다. 예를 들어, "Google로 로그인" 기능은 OpenID Connect를 사용하여 구현됩니다. - 프로토콜 구조:
OAuth 2.0: 독립적인 권한 부여 프로토콜로, 인증을 명확하게 정의하지 않습니다.
OpenID Connect: OAuth 2.0을 확장하여 인증 계층을 추가하고, 사용자 인증에 필요한 추가 엔드포인트와 흐름을 정의합니다.
결론
OAuth 2.0과 OpenID Connect는 현대 웹 애플리케이션에서 인증 및 권한 부여를 처리하는 중요한 프로토콜입니다. OAuth 2.0은 주로 권한 부여를 다루며, 제3자 애플리케이션이 리소스에 안전하게 접근할 수 있도록 합니다. 반면, OpenID Connect는 OAuth 2.0을 기반으로 사용자 인증을 처리하며, ID 토큰을 통해 인증된 사용자 정보를 제공합니다.
OAuth 2.0과 OpenID Connect를 올바르게 이해하고 활용하면, 애플리케이션의 보안과 사용자 경험을 크게 개선할 수 있습니다. 이를 통해 사용자가 안전하게 리소스에 접근하고, 제3자 애플리케이션에 자신의 자격 증명을 노출하지 않으면서도 다양한 서비스를 사용할 수 있게 됩니다.
- 공유 링크 만들기
- X
- 이메일
- 기타 앱