ClientLogin에서 OAuth 2.0으로 이동

Ikai Lan, YouTube Developer Relations – June 2013

Data API의 버전 3부터 YouTube의 데이터 API 및 분석 API에서 지원되는 모든 인증 방식은 OAuth 2.0을 사용합니다. 향후 YouTube API에 ClientLogin 인증 또는 유사한 방식에 대한 지원을 추가할 것인지 여부에 대해 문의하는 경우가 많습니다. 하지만 YouTube는 2012년 4월 20일부터 공식적으로 ClientLogin 사용을 중지했으며 이러한 메커니즘을 추가할 계획이 없습니다.

여러 가지 이유로 YouTube 사용자에게 ClientLogin보다 OAuth 2.0 인증의 다양한 흐름을 지원하는 것이 더 좋을 것이라고 판단하였습니다. OAuth 2.0 흐름은 데스크톱 애플리케이션, 웹 전용 애플리케이션, 네이티브 모바일 애플리케이션의 사용 사례를 지원하며 ClientLogin을 사용하기가 어려운 정교한 입력 메커니즘이 없는 TV와 같은 기기에서 실행되는 애플리케이션도 지원합니다. 또한 ClientLogin이 많은 개발자에게 출시 후 다양한 문제를 발생시켰다는 사실을 파악했으며 이러한 문제 중 일부는 YouTube 게시물 ClientLogin #FAIL에서 확인할 수 있습니다.

서버측, 독립형 스크립트용 OAuth 2.0 사용

많은 개발자가 브라우저가 없는 서버에서 실행하는 명령줄 스크립트를 인증하는 데 ClientLogin을 사용합니다. OAuth 2.0을 사용하면 대개 브라우저가 필요합니다. GoogleAuthUtil.를 통해 토큰을 가져오기 위해 Google Play Services를 사용하는 Android 애플리케이션에서 작업하는 경우는 예외입니다.

웹 전용 흐름에서 사용자를 대신하여 인증된 API 호출을 원하는 웹사이트는 사용자를 애플리케이션에서 액세스하려고 시도하는 항목에 대해 설명하는 google.com 인증 페이지로 리디렉션해야 합니다. 그러면 웹 애플리케이션에서 토큰을 받게 되며 API를 호출하는 데 사용합니다. 사용자는 connected apps and sites 페이지를 사용하여 언제든지 애플리케이션의 액세스를 취소할 수 있습니다.

YouTube의 Python 코드 샘플은 명령줄 스크립트가 브라우저를 실행하고 콘솔에서 API를 호출하고 인증 리디렉션 후 코드를 수신하도록 로컬 서버를 만들고 자동으로 향후 API 호출과 관련된 토큰을 저장하는 방법을 보여줍니다. 다음은 이 예의 동영상입니다.

사용된 토큰은 ASCII 문자열입니다. offline 토큰인 경우 이동 가능합니다. 검색된 토큰을 사용하면 데스크톱에서 스크립트를 실행할 수 있으며 GUI 없이 원격 서버에서 코드를 복사하고 사용할 수 있고 해당 코드가 제공되면 동일한 클라이언트 ID 및 비밀번호로 OAuth 2.0 클라이언트를 인스턴스화할 수 있습니다. Python외에도 다른 프로그래밍 언어용 Google API 클라이언트 라이브러리는 클라이언트 간에 공유할 수 있고 클라이언트 헤더에 또는 URL 매개변수로써 낮은 수준의 HTTP 라이브러리에 직접 사용할 수 있는 토큰 관리와 관련된 헬퍼 메소드를 제공합니다.

다음은 오프라인 토큰을 사용하는 서버측 스크립트의 몇 가지 예입니다.

  • YouTube에 자동으로 업로드하기 위해 새 동영상 관련 디렉토리를 모니터링하는 데몬
  • 새 콘텐츠로 재생목록을 매일 업데이트하는 크론 작업
  • YouTube Analytics API를 통해 동영상 데이터를 모니터링하고 특정 이벤트(예: 총 시청 시간이 한도 초과)가 발생하면 채널 관리자에게 알려주는 스크립트입니다. 이 경우 Analytics API에서 ClientLogin을 지원하지 않기 때문에 인증 메소드로는 OAuth 2.0만 지원됩니다.

장기 액세스 토큰의 섹션에서는 서버측 처리에 사용할 수 있는 오프라인 토큰을 생성하는 방법에 대해 자세히 설명합니다.

클라이언트 ID 및 클라이언트 비밀번호 권장사항

같은 클라이언트 ID 및 비밀번호 쌍을 공유하는 모든 코드는 같은 액세스 토큰을 사용할 수 있습니다. 조직 내 시스템 및 기기에서 실행되는 코드의 클라이언트 ID 및 클라이언트 비밀번호에 대한 액세스를 제한하는 것이 좋습니다.

네이티브 모바일 애플리케이션 코드의 일부로 클라이언트 ID 및 클라이언트 비밀번호를 포함하지 마세요. 휴대기기에서 OAuth 2.0 인증을 사용하는 모든 개발자는 자신의 팀에서 출시된 애플리케이션에서만 요청이 전송됨을 확인하기 위해 추가 정보를 요청하는 '설치된 애플리케이션' 클라이언트 ID를 사용해야 합니다.

Android 기기의 경우 클라이언트 ID 및 클라이언트 비밀번호를 사용하는 대신 패키지 이름 및 서명 인증서 해시 조합을 사용하여 애플리케이션을 식별합니다. iOS 기기의 경우 번들 ID 및 App Store ID를 사용합니다. 이 정보를 검색할 수 있는 공식 문서는 Google API console 도움말 페이지를 참조하세요.

YouTube API에서 작동하지 않는 서비스 계정

서비스 계정은 연결된 YouTube 채널이 필요하며 새 채널 또는 기존 채널을 서비스 계정에 연결할 수 없기 때문에 YouTube API 호출에 사용할 수 없습니다. YouTube API를 호출하기 위해 서비스 계정을 사용하면 오류가 반환되며 오류 유형은 unauthorized로 설정되고 원인은 youtubeSignupRequired로 설정됩니다.

YouTube API에 대한 오프라인/장기 액세스

OAuth 2.0에는 장기 토큰과 단기 토큰이 있습니다. 일회성 작업의 경우 단기 액세스 토큰이 적합합니다. 단기 토큰은 인증된 후 바로 만료됩니다. 오랜 시간 실행되는 작업의 경우 단기 액세스 토큰을 가져오는 데 사용되는 갱신 토큰을 획득하는 방법에 대해 알아보세요.

애플리케이션에서 단기 액세스 토큰이 아닌 장기 갱신 토큰을 받는지 확인하려면 클라이언트 ID를 만들 때 '설치된 애플리케이션' 흐름을 사용하고 '설치된 애플리케이션 유형' 값에 Other를 선택하세요.

이와 같이 사용하려면 '설치된 애플리케이션' 흐름을 사용하는 것이 좋습니다. 웹 애플리케이션에서 YouTube API에 장기간 액세스해야 하는 경우 최초 인증 요청 또는 클라이언트 설정에서 access_type 매개변수를 offline으로 설정하고 approval_prompt 매개변수를 force로 설정함으로써 검색할 수 있습니다. 일부 클라이언트 라이브러리는 액세스 토큰을 가져오고 갱신하는 작업을 관리합니다. 고유의 맞춤설정 인증 코드를 작성하고 싶은 경우 YouTube에서 게시한 Google 코드 블로그의 블로그 게시물을 참조하면 코드의 기본으로 활용할 수 있습니다.

휴대전화, 태블릿, 기타 기기로 OAuth 2.0 사용

Android 애플리케이션 작성 시 개발자는 Google Play services를 활용하여 인증 세부사항을 처리할 수 있습니다. Google Play 서비스는 YouTube 플랫폼용 API를 비롯한 모든 Google API와 관련된 기본 인증 흐름을 제공합니다. 이러한 방법을 사용하면 Android 애플리케이션 사용자에게 ClientLogin을 사용한 맞춤설정 인증에 비해 훨씬 뛰어난 사용자 환경을 제공합니다.

iOS 기기의 경우 Google은 다음과 같은 2가지 옵션을 제공합니다.

'보조 화면' 기기의 역할을 하는 기기 또는 간편한 입력 메커니즘이 없는 TV와 같은 기기의 경우 기기용 OAuth 2.0을 사용하면 좋습니다. 기기용 OAuth 2.0은 인증 요청이 필요할 때 사용자에 해당하는 고유 코드를 제시하는 방식으로 작동합니다. 이때 사용자에게 노트북이나 휴대전화와 같은 다른 기기에서 http://google.com/device로 이동한 다음 고유 코드를 입력하라는 메시지가 표시됩니다. 애플리케이션에서는 다음과 같은 화면을 표시합니다.

사용자가 다른 기기에서 코드를 입력하는 동안 애플리케이션은 주기적으로 코드가 입력되었는지 확인하기 위해 폴링합니다. 코드가 입력되면 애플리케이션은 API를 호출하기 위한 토큰을 검색합니다. 이 작업을 직접 확인해 보려면 모든 웹을 이용할 수 있는 기기에서 실행 가능한 데모를 참조하세요. API 자체는 플랫폼에 관계없이 사용 가능하므로 웹 렌더링 기능이 없는 기기에 유용합니다. 데모를 참조용으로 사용할 수 있도록 Python 샘플 코드를 게시했습니다.

요약

OAuth 2.0 인증은 YouTube 인증이 필요한 개발자에게 유연성을 제공합니다. ClientLogin에 익숙한 개발자의 경우 애플리케이션에서 OAuth 2.0을 사용하도록 설정하는 데 조금 더 많은 작업이 필요하다고 느낄 수 있습니다. 하지만 포팅이 되면 OAuth 2.0 애플리케이션은 최종 사용자를 위한 다양한 플랫폼 전반에 보다 나은 유연성, 보안, 가용성을 제공하게 됩니다.

OAuth 2.0 또는 이 도움말의 예와 관련해 추가로 궁금한 사항이 있는 경우 StackOverflow에 youtube-api 태그를 추가하거나 YouTube 개발자 라이브 근무 시간에 문의하세요.