한국어
  • oauth
  • device flow
  • cli
  • authentication
  • device code

OAuth 2.0 디바이스 플로우에 대한 간략한 소개

이 글은 OAuth 2.0 디바이스 플로우, 브라우저를 통한 사용자 에이전트 기반 인증을 수행할 수 없거나 입력이 제한된 디바이스에서의 신원 인증 솔루션을 탐구하며, 그 목적과 사용자 상호작용 흐름을 설명합니다.

Yijun
Yijun
Developer

권한 부여 프레임워크로서 OAuth 2.0은 다양한 시나리오에서 널리 사용됩니다. OAuth에서 제공하는 인증 흐름 중 가장 일반적인 것은 Authorization Code Flow입니다. 사용자가 Authorization Code Flow를 사용하여 애플리케이션 내에서 신뢰할 수 있는 ID를 인증하면, 앱은 디바이스에서 브라우저를 열어 인증 엔드포인트에 액세스하고, 그런 다음 사용자는 자신의 식별자(사용자 이름, 이메일 등) 및 자격 증명(비밀번호, 인증 코드 등)을 입력하여 인증을 완료합니다.

그러나 브라우저가 없거나 계정 자격 증명을 입력할 수 있는 기능이 없는 디바이스에서 앱을 사용하려는 경우, 어떻게 OAuth 2.0을 통해 신원 인증을 수행할 수 있을까요? 이 경우에 '디바이스 플로우'가 중요한 역할을 합니다.

OAuth 2.0 디바이스 플로우란?

OAuth 2.0 디바이스 플로우는 적절한 브라우저가 없거나 입력 기능이 제한된 디바이스를 지원하기 위해 설계된 OAuth 2.0 프로토콜의 구현입니다. 이러한 디바이스는 스마트 TV, IoT 디바이스, 프린터 등을 포함합니다.

디바이스 플로우를 통해 사용자는 앞서 언급한 디바이스에서 인증 요청을 시작할 수 있고, 이후 브라우저 접근 권한과 입력 기능이 있는 다른 디바이스(예: 스마트폰 또는 개인 컴퓨터)를 통해 사용자 인증 요청을 검토하고 완료할 수 있습니다.

또한, CLI 도구(Stripe, Github, Cloudflare에서 제공하는 도구와 같은)는 그래픽 인터페이스가 없는 운영 체제에서 실행되기 때문에 종종 디바이스 플로우가 사용됩니다.

디바이스 플로우를 사용할 때의 사용자 상호작용 흐름

사용자가 인증을 위해 디바이스 플로우를 사용하는 경우 주로 다음 단계들이 포함됩니다:

  1. 디바이스 클라이언트가 인증 서버에 클라이언트 식별자로 권한을 요청합니다 (일반적으로 인증 서버 플랫폼의 클라이언트 ID).
  2. 인증 서버는 디바이스 코드, 사용자 코드 및 검증 URI를 디바이스 클라이언트에게 응답합니다.
  3. 디바이스 클라이언트는 검증 URI와 사용자 코드를 사용자에게 텍스트(또는 QR 코드 등) 형태로 보여 주고, 사용자가 URI를 방문하고 코드를 입력하도록 지시합니다.
  4. 3단계와 동시에 디바이스 클라이언트는 인증 서버로부터 디바이스 코드와 클라이언트 식별자를 사용하여 액세스 토큰을 폴링하기 시작하고, 사용자가 인증 요청을 검토하고 사용자 인증을 완료하기를 기다립니다.
  5. 사용자가 다른 디바이스의 브라우저를 통해 인증 서버가 호스팅하는 검증 URI를 방문하고 사용자 코드를 입력합니다.
  6. 인증 서버는 사용자를 로그인 페이지로 리디렉션하고, 사용자가 로그인 완료를 지시합니다.
  7. 사용자가 로그인 흐름을 완료하고 성공적으로 로그인합니다.
  8. 인증 서버는 사용자를 로그인 성공 페이지로 리디렉션하고 브라우저를 닫도록 지시합니다.
  9. 8단계와 동시에 인증 서버는 디바이스 클라이언트에 액세스 토큰을 반환합니다. 클라이언트는 4단계부터 폴링하고 있었습니다.

이 과정이 완료되면 디바이스 클라이언트는 후속 서비스를 위한 액세스 토큰을 얻을 수 있습니다!

요약

보았듯이, OAuth 2.0 디바이스 플로우는 입력 기능이 부족하거나 브라우저가 없는 디바이스를 위한 사용자 친화적인 로그인 방법을 제공합니다. 이는 스마트 TV, IoT 디바이스, 그리고 그래픽 인터페이스가 부족한 기기에서 실행되는 CLI 도구에 필수적입니다.

Logto에서 디바이스 플로우 기능을 지원하기 위해 준비 중이라는 기쁜 소식이 있습니다. 최신 업데이트를 통해 곧 소식을 전해 드리겠습니다.