OpenID vs OAuth
July 3, 2024
사용자 정보의 보안을 보장하고 제한된 리소스에 대한 접근을 허용하기 위해 두 가지 주류 기술이 등장했습니다: OpenID Connect와 OAuth. 이 두 기술은 종종 함께 논의되지만, 기능적 위치와 핵심 목표에서 근본적으로 다릅니다.
구체적으로, OAuth는 권한 부여 프레임워크를 구축하는 데 초점을 맞추고 있으며, 그 핵심 목적은 사용자 신원 확인을 직접적으로 다루지 않고 특정 리소스에 대한 접근 권한을 제3자 애플리케이션에 부여하는 것입니다. 반면, OpenID Connect는 정확히 신원 인증 서비스로 위치지어져 있으며, OAuth가 신원 인식 영역에서 갖는 공백을 메우고 사용자 신원의 진실성과 신뢰성을 보장합니다.
이 블로그에서는 OpenID Connect와 OAuth의 본질, 운영 메커니즘, 전형적인 응용 시나리오, 그리고 이 둘 사이의 미묘하지만 긴밀한 관계에 대해 깊이 있게 탐구해 보겠습니다.
OpenID Connect란 무엇인가?
OpenID Connect (OIDC)는 OAuth 2.0 프레임워크를 기반으로 한 인증 프로토콜로, ID 토큰이라는 개념을 도입하여 OAuth의 기능을 확장합니다. OIDC는 사용자가 제3자 애플리케이션에 자신의 리소스 접근을 허가할 뿐만 아니라, 사용자 신원 정보의 검증도 제공하여 단일 로그인 자격 증명으로 여러 서비스에 안전하게 접근할 수 있게 합니다.
OAuth 2.0과 비교했을 때, OIDC의 핵심 차이점은 인증 계층이 추가되었다는 점입니다. OAuth 2.0은 주로 권한 부여에 초점을 맞추어 사용자가 제3자 애플리케이션의 리소스 접근 권한을 제어할 수 있게 하지만, 사용자 신원의 구체적인 검증은 다루지 않습니다.
OpenID Connect 인증 과정:
-
애플리케이션 접근: 사용자가 애플리케이션이나 서비스를 사용하려 할 때, 애플리케이션이 사용자 신원을 확인해야 한다면 사용자는 신원 인증 서비스 제공자인 OpenID Connect 제공자(OP)로 리디렉션됩니다.
-
사용자 로그인: 사용자는 OP의 로그인 인터페이스에서 사용자 이름과 비밀번호(또는 OP가 지원하는 다른 인증 메커니즘)를 입력합니다. 사용자가 성공적으로 로그인하면, OpenID Connect 제공자는 사용자의 신원을 확인합니다.
-
ID 토큰 발급: 사용자 신원이 확인되면, OpenID Connect 제공자는 ID 토큰이라는 특별한 토큰을 생성합니다. 이 토큰은 사용자 이름, 이메일 주소 등 사용자 신원 정보를 포함하며, 사용자 신원의 디지털 표현과 전송을 보장합니다.
-
ID 토큰 사용: ID 토큰을 획득한 후, 사용자는 이전에 접근하려 했던 애플리케이션에 이를 제시할 수 있습니다. 애플리케이션은 토큰을 검증하는 메커니즘을 활성화하여 토큰이 신뢰할 수 있는 OpenID Connect 제공자로부터 발급되었고 만료되지 않았는지 확인합니다.
-
애플리케이션 접근: 애플리케이션이 ID 토큰의 유효성을 확인하면, 사용자는 보호된 리소스나 서비스에 접근할 수 있습니다. 이렇게 하여 사용자는 각 애플리케이션에 별도로 등록하고 로그인할 필요 없이 OpenID Connect 제공자가 발급한 ID 토큰을 사용할 수 있습니다.
-
보안 보장: OpenID Connect는 고급 JSON Web Token (JWT) 기술을 사용하여 토큰을 생성하고 검증하며, 데이터 변조와 도난의 위험을 효과적으로 완화합니다. 또한, OpenID Connect는 다양한 인증 및 권한 부여 모드(예: 권한 코드 모드, 암시적 모드, 하이브리드 모드)를 유연하게 지원하여 다양한 시나리오의 보안 요구에 적응합니다.
OAuth란 무엇인가?
간단히 말해, OAuth는 제3자 애플리케이션이 사용자의 로그인 자격 증명(사용자 이름과 비밀번호)을 직접 접근하지 않고도 다른 서비스에 저장된 사용자의 민감한 리소스(예: 사진 라이브러리, 연락처 목록 등)에 접근할 수 있도록 허용하는 프로토콜입니다. 이 메커니즘은 "인증"보다는 "권한 부여"에 더 초점을 맞추고 있습니다.
예를 들어, Google 계정을 사용하여 뉴스 앱에 로그인하려 할 때, 앱은 OAuth를 사용하여 Google 계정에서 공개 정보(예: 아바타, 닉네임)를 요청할 수 있으며, 사용자가 뉴스 앱에 직접 Google 계정 사용자 이름과 비밀번호를 제공할 필요가 없습니다.
OAuth 권한 부여 과정:
-
사용자 권한 요청: 다른 소셜 네트워크의 계정 정보에 접근하려는 소셜 애플리케이션을 사용 중이라고 가정해 보겠습니다. 그러나 이 정보는 보호되어 있으므로 권한 부여가 필요합니다.
-
권한 서버로 리디렉션: 제3자 애플리케이션은 사용자의 요청을 권한 서버의 페이지로 리디렉션합니다. 이 페이지는 일반적으로 사용자에게 권한을 부여하려는 서비스에 로그인하도록 요청합니다.
-
사용자 로그인 및 권한 부여: 권한 서버의 페이지에서 사용자는 자신의 계정으로 로그인해야 합니다. 로그인 후, 페이지는 제3자 애플리케이션이 사용자의 정보에 접근하도록 허용할지 여부를 묻습니다.
-
권한 서버가 액세스 토큰 발급: 사용자가 동의하면, 권한 서버는 액세스 토큰이라는 특별한 "패스"를 생성합니다. 이 토큰은 일정 기간 동안 제3자 애플리케이션이 사용자의 정보에 접근할 수 있도록 허용하는 임시 입장권과 같습니다.
-
제3자 애플리케이션이 액세스 토큰 사용: 제3자 애플리케이션이 액세스 토큰을 획득하면, 이 토큰을 사용하여 일정 기간 동안 사용자의 정보를 요청할 수 있습니다. 요청할 때마다 이 토큰을 제시하여 사용자로부터 권한을 받았음을 증명해야 합니다.
-
권한 서버가 토큰을 검증하고 리소스 반환: 제3자 애플리케이션이 사용자 정보를 저장한 권한 서버에 액세스 토큰을 제시하면, 권한 서버는 토큰이 유효한지 확인합니다. 유효하다면, 토큰의 권한에 따라 제3자 애플리케이션이 해당 정보에 접근할 수 있도록 허용합니다.
OAuth 방식을 채택함으로써, 사용자 계정의 보안이 크게 강화될 뿐만 아니라, 사용자가 직접 제3자 애플리케이션에 사용자 이름과 비밀번호를 노출할 필요가 없어집니다. 또한, 사용자가 어떤 애플리케이션이 자신의 어떤 정보에 접근할 수 있는지 독립적으로 결정할 수 있는 유연한 권한 부여 메커니즘을 제공하여 개인 정보의 흐름을 정밀하게 제어할 수 있습니다.
OpenID Connect와 OAuth의 차이점과 연관성
OpenID Connect와 OAuth의 차이점과 연관성은 실제 응용에서 특히 생생하게 나타납니다. "펫 파라다이스"라는 온라인 펫 웹사이트가 있다고 가정해 보겠습니다. 이 웹사이트에서 고객은 펫 용품을 구매할 수 있으며, 펫 스토어는 또한 펫 건강 추적 앱을 제공하여 고객이 자신의 펫의 체중, 식단, 예방 접종 상태 등의 건강 데이터를 기록할 수 있습니다.
이 사용 사례에서 OpenID Connect의 응용:
-
인증: 고객이 처음으로 "펫 파라다이스" 웹사이트를 방문하거나 펫 건강 추적 앱을 다운로드하여 사용할 때, 등록 및 로그인이 필요합니다. 편리한 로그인 경험을 제공하기 위해, 펫 스토어는 OpenID Connect를 사용하여 단일 로그인(SSO)을 구현하기로 결정합니다.
-
ID 토큰: 고객은 OpenID Connect를 지원하는 다른 서비스(예: 소셜 미디어 계정)의 자격 증명을 사용하여 로그인할 수 있습니다. 로그인이 성공하면, OpenID Connect 제공자는 고객에게 ID 토큰을 발급합니다. 이 토큰은 고객의 신원 정보를 포함하며 암호화되고 서명됩니다.
-
서비스 간 인증: 고객이 나중에 펫 스토어의 다른 서비스(예: 웹사이트에서 앱으로)를 방문하면, 이전에 획득한 ID 토큰을 사용하여 인증할 수 있으며, 사용자 이름과 비밀번호를 다시 입력할 필요가 없습니다. 이를 통해 고객은 다른 서비스 간에 원활하게 전환할 수 있습니다.
이 사용 사례에서 OAuth의 응용:
-
제3자 애플리케이션 권한 부여: "펫 파라다이스"가 "펫 다이어리"라는 제3자 애플리케이션과 협력하고, 고객이 "펫 파라다이스"에서 구매한 펫 용품 기록과 펫 건강 데이터를 "펫 다이어리"로 동기화할 수 있도록 허용하려 한다고 가정해 보겠습니다.
-
액세스 토큰: 이 기능을 구현하기 위해, "펫 파라다이스"는 OAuth를 사용하여 "펫 다이어리" 애플리케이션에 고객의 데이터 접근 권한을 부여합니다. 고객이 "펫 파라다이스" 웹사이트에서 권한을 동의하면, OAuth 흐름을 통해 액세스 토큰이 생성되며, 이 토큰은 "펫 다이어리" 애플리케이션이 "펫 파라다이스"에서 고객의 특정 데이터에 접근할 수 있도록 허용합니다.
-
사용자 데이터 보호: OAuth를 통해, 고객의 로그인 자격 증명(사용자 이름과 비밀번호)은 "펫 다이어리" 애플리케이션에 직접 노출되지 않고, 액세스 토큰을 통해 안전하게 공유됩니다. 이렇게 하면, "펫 다이어리" 애플리케이션이 공격을 받더라도 공격자가 고객의 로그인 자격 증명을 직접 획득할 수 없습니다.
요약
요약하자면, OAuth와 OpenID Connect의 차이점과 연관성은 다음과 같이 정리할 수 있습니다.
-
기반과 확장:
- OAuth는 권한 부여 프레임워크로, 제3자 애플리케이션이 사용자의 사용자 이름과 비밀번호를 사용하지 않고도 제한된 접근 권한을 얻을 수 있도록 합니다.
- OpenID Connect는 OAuth 2.0을 기반으로 하여 인증 계층을 추가하여 기능을 확장합니다.
-
토큰과 인증:
- OAuth에서는 주로 권한 부여, 즉 애플리케이션이 사용자의 리소스에 접근할 수 있도록 하는 데 초점을 맞추는 반면, OpenID Connect는 인증, 즉 사용자의 신원을 확인하는 데 더 초점을 맞춥니다.
- OpenID Connect는 ID 토큰이라는 개념을 도입하며, 이는 사용자의 신원 정보를 포함하는 JSON Web Token (JWT)입니다. 이 토큰은 사용자의 신원을 증명할 뿐만 아니라 사용자의 개인 프로필 정보도 포함할 수 있습니다.
-
협력:
- 애플리케이션이 사용자의 신원을 확인하고 사용자의 리소스에 접근해야 할 때, OpenID Connect와 OAuth는 함께 작동할 수 있습니다.
- 사용자는 먼저 OpenID Connect를 통해 신원을 인증하여 ID 토큰을 획득한 후, 애플리케이션은 이 토큰과 OAuth 흐름을 사용하여 사용자의 리소스 접근 권한을 얻을 수 있습니다.
요약하자면, OpenID Connect와 OAuth는 두 가지 상호 보완적인 신원 인증 및 권한 부여 프로토콜로, 현대의 웹 및 모바일 애플리케이션을 위한 안전하고 유연하며 사용자 친화적인 인증 및 권한 부여 솔루션을 함께 제공합니다.