이카이 란, YouTube Developer Relations – June 2013
YouTube API는 OAuth 2.0을 사용하여 사용자 요청을 승인합니다. 향후 YouTube API에 ClientLogin 인증 또는 이와 유사한 기능을 지원할 예정인지에 관한 질문이 자주 접수됩니다. 하지만 2012년 4월 20일에 ClientLogin이 공식적으로 지원 중단되었으며 이러한 메커니즘을 추가할 계획은 없습니다.
다양한 OAuth 2.0 승인 흐름을 지원하는 것이 ClientLogin보다 YouTube 사용자에게 더 나은 이유는 여러 가지가 있습니다. 이러한 흐름은 데스크톱 애플리케이션, 웹 전용 애플리케이션, 모바일 애플리케이션은 물론 정교한 입력 메커니즘이 없는 텔레비전과 같은 기기에서 실행되는 애플리케이션의 사용 사례를 지원합니다. 이는 ClientLogin를 사용하여 수행하기 어려운 작업입니다. 또한 ClientLogin는 출시 후 많은 개발자에게 더 큰 문제를 일으키는 것으로 확인되었습니다.
서버측, 독립형 스크립트용 OAuth 2.0 사용
많은 개발자가 ClientLogin를 사용하여 브라우저 없이 서버에서 실행되는 명령줄 스크립트를 승인합니다. OAuth 2.0을 사용하면 브라우저가 거의 항상 관련됩니다. 예외는 Google Play Services을 사용하여 GoogleAuthUtil.을 통해 토큰을 가져오는 Android 애플리케이션에서 작업하는 경우입니다.
웹 전용 흐름에서 사용자를 대신하여 인증된 API 호출을 실행하려는 웹사이트는 애플리케이션이 액세스하려고 하는 항목을 설명하는 google.com 인증 페이지로 사용자를 리디렉션해야 합니다. 그러면 웹 애플리케이션이 토큰을 수신하고 이를 사용하여 API를 호출합니다. 그러면 사용자는 connected apps and sites 페이지를 사용하여 언제든지 애플리케이션의 액세스 권한을 취소할 수 있습니다.
Python 코드 샘플은 명령줄 스크립트가 브라우저를 실행하고 터미널 창에서 API를 호출하고, 승인 리디렉션 후 코드를 수신하는 로컬 서버를 만들고, 향후 API 호출을 위한 토큰을 자동으로 저장하는 방법을 보여줍니다. 다음은 이 예의 동영상입니다.
사용된 토큰은 ASCII 문자열입니다. offline 토큰인 경우 이동 가능합니다. 가져온 토큰을 사용하면 데스크톱에서 스크립트를 실행한 다음 동일한 클라이언트 ID와 보안 비밀로 OAuth 2.0 클라이언트를 인스턴스화하는 코드를 GUI가 없는 원격 서버에 복사하여 사용할 수 있습니다. 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 Cloud console 도움말 페이지에서 확인할 수 있습니다.
YouTube API에서 작동하지 않는 서비스 계정
서비스 계정에는 연결된 YouTube 채널이 필요하며 새 채널이나 기존 채널을 서비스 계정과 연결할 수 없으므로 YouTube Data API 호출에는 서비스 계정이 작동하지 않습니다. 서비스 계정을 사용하여 YouTube Data API를 호출하면 API 서버에서 오류 유형이 unauthorized로 설정되고 이유가 youtubeSignupRequired로 설정된 오류를 반환합니다.
YouTube API에 대한 오프라인/장기 액세스
OAuth 2.0에는 단기 토큰과 장기 토큰이 있습니다. 일회성 작업에는 단기 액세스 토큰이 가장 적합합니다. 이러한 토큰은 부여된 후 곧 만료됩니다. 장기 실행 작업의 경우 단기 액세스 토큰을 가져오는 데 사용되는 갱신 토큰을 획득하는 것이 좋습니다.
애플리케이션이 수명이 짧은 액세스 토큰이 아닌 수명이 긴 갱신 토큰을 수신하도록 하려면 클라이언트 ID를 만들 때 '설치된 애플리케이션' 흐름을 사용하고 '설치된 애플리케이션 유형' 값으로 Other을 선택하세요.

이 사용 사례에는 '설치된 애플리케이션' 흐름을 사용하는 것이 좋습니다. 웹 애플리케이션에서 YouTube API에 대한 장기 지속 액세스가 필요한 경우 초기 승인 요청 또는 클라이언트 구성에서 access_type 매개변수를 offline로, approval_prompt 매개변수를 force로 설정하여 액세스 토큰을 가져올 수 있습니다. 일부 클라이언트 라이브러리는 액세스 토큰 가져오기 및 새로고침을 관리합니다. 자체 맞춤 승인 코드를 작성하는 데 관심이 있다면 코드의 기반으로 사용할 수 있는 Google 코드 블로그의 블로그 게시물을 참고하세요.
휴대전화, 태블릿, 기타 기기로 OAuth 2.0 사용
Android 애플리케이션을 작성할 때 개발자는 Google Play services를 활용하여 승인 세부정보를 처리할 수 있습니다. Google Play 서비스는 YouTube 플랫폼용 API를 비롯한 모든 Google API에 대한 표준 승인 흐름을 제공합니다. 이 접근 방식은 ClientLogin를 사용하는 맞춤 인증보다 Android 애플리케이션 사용자에게 훨씬 우수한 사용자 환경을 제공합니다.

iOS 기기의 경우 Google은 다음과 같은 2가지 옵션을 제공합니다.
- Google 제품의 로그인을 통합하고 소셜 기능을 사용 설정하는 Google+ Platform for iOS
- 승인 UIWebView를 제공하고 토큰을 관리하는 gtm-oauth2 toolkit
'두 번째 화면' 기기 또는 사용하기 쉬운 입력 메커니즘이 없는 텔레비전과 같은 기기로 작동하는 기기의 경우 기기용 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 태그를 사용하여 질문해 주세요.