ClientLogin에서 OAuth 2.0으로 이동

이카이 란, YouTube Developer Relations – June 2013

YouTube API는 OAuth 2.0을 사용하여 사용자 요청을 승인합니다. 향후 YouTube API에 ClientLogin 인증 또는 유사한 기능에 대한 지원을 추가할 것인지 묻는 메시지가 자주 표시됩니다. 하지만 2012년 4월 20일부터 ClientLogin가 공식적으로 지원 중단되었으며 그러한 메커니즘을 추가할 계획은 없습니다.

여러 가지 이유로 YouTube 사용자에게 다양한 OAuth 2.0 승인 흐름을 지원하는 것이 ClientLogin보다 더 나은 것으로 판단됩니다. 이러한 흐름은 데스크톱 애플리케이션, 웹 전용 애플리케이션, 네이티브 모바일 애플리케이션의 사용 사례를 지원하며, ClientLogin를 사용하기 어려운 까다로운 입력 메커니즘이 없는 TV와 같은 기기에서 실행되는 애플리케이션도 지원합니다. 또한 ClientLogin이(가) 출시 이후 많은 개발자에게 골칫거리가 되는 것으로 확인되었습니다. 그중 일부는 블로그 게시물 ClientLogin #FAIL에 설명되어 있습니다.

서버측, 독립형 스크립트용 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 토큰인 경우 이동 가능합니다. 검색된 토큰을 사용하면 데스크톱에서 스크립트를 실행한 다음 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 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가지 옵션을 제공합니다.

'보조 화면' 기기의 역할을 하는 기기나 사용하기 쉬운 입력 메커니즘이 없는 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 태그를 사용하여 문의하세요.