ClientLogin'den OAuth 2.0'a geçiş

Ikai Lan, YouTube Developer Relations – June 2013

YouTube API'leri, kullanıcı isteklerini yetkilendirmek için OAuth 2.0'ı kullanır. YouTube API'lerine ClientLogin kimlik doğrulama veya benzer bir özellik ekleyip eklemeyeceğimizi sık sık soruluyor. Ancak ClientLogin için desteği 20 Nisan 2012'de resmen sonlandırdık ve böyle bir mekanizmayı ekleme planımız bulunmuyor.

Çeşitli OAuth 2.0 yetkilendirme akışlarının desteklenmesinin YouTube kullanıcıları için ClientLogin'ten daha iyi olduğuna inanıyoruz. Bu akışlar; masaüstü uygulamaları, yalnızca web uygulamaları, yerel mobil uygulamalar ve hatta ClientLogin'ü kullanarak yapılması zor olan, karmaşık giriş mekanizmalarına sahip olmayan televizyonlar gibi cihazlarda çalışan uygulamaların kullanım alanlarını destekler. Ayrıca, ClientLogin'ün birçok geliştirici için lansman sonrası daha fazla soruna neden olduğunu tespit ettik. Bu sorunlardan bazılarını ClientLogin #FAIL başlıklı blog yayınımızda açıklıyoruz.

Sunucu tarafı bağımsız komut dosyaları için OAuth 2.0'ı kullanma

Birçok geliştirici, tarayıcı olmadan sunucularda çalışan komut satırı komut dosyalarını yetkilendirmek için ClientLogin değerini kullanır. OAuth 2.0'da neredeyse her zaman bir tarayıcı kullanılır. Bunun istisnası, GoogleAuthUtil. üzerinden jeton almak için Google Play Services kullanan bir Android uygulaması üzerinde çalıştığınız durumlardır.

Yalnızca web akışında, kullanıcı adına kimliği doğrulanmış API çağrıları yapmak isteyen bir web sitesinin, kullanıcıyı uygulamanın erişmeye çalıştığı yeri açıklayan bir google.com kimlik doğrulama sayfasına yönlendirmesi gerekir. Ardından web uygulaması, API çağrıları yapmak için kullanacağı bir jeton alır. Kullanıcı, connected apps and sites sayfasını kullanarak uygulamanın erişimini dilediğinde iptal edebilir.

Python kod örneklerimizde, komut satırı komut dosyalarının bir tarayıcı başlatıp terminal penceresinden API çağrıları yapabileceği, yetkilendirme yönlendirmesinden sonra kodu dinlemek için yerel bir sunucu oluşturabileceği ve gelecekteki API çağrıları için jetonu otomatik olarak kaydedebileceği gösterilmektedir. Bu özelliğin nasıl kullanıldığını gösteren videoyu aşağıda bulabilirsiniz:

Kullanılan jeton bir ASCII dizesidir. offline jetonu ise taşınabilir. Alınan jetonu kullanarak komut dosyasını masaüstünüzde çalıştırabilir, ardından kodu kopyalayıp GUI'siz bir uzak sunucuda kullanabilirsiniz (kodun aynı istemci kimliği ve gizli anahtarıyla bir OAuth 2.0 istemcisi oluşturduğu varsayılarak). Python'a ek olarak, diğer programlama dilleri için Google API istemci kitaplıkları da jetonları yönetmeye yönelik yardımcı yöntemler sağlar. Bu yöntemler, istemciler arasında paylaşılabilir ve hatta alt düzey HTTP kitaplıklarında doğrudan bir istemci başlığında veya URL parametresi olarak kullanılabilir.

Çevrimdışı jeton kullanan sunucu tarafı komut dosyalarına bazı örnekler:

  • YouTube'a otomatik olarak yüklenecek yeni videolar için bir dizini izleyen bir daemon
  • Oynatma listelerini her gün yeni içeriklerle güncelleyen bir cron işi
  • YouTube Analytics API aracılığıyla video verilerini izleyen ve belirli etkinlikler gerçekleştiğinde (ör. toplam izlenme süresinin bir sınırı aşması) kanal yöneticilerini bilgilendiren bir komut dosyası. Analytics API, ClientLogin'ı desteklemediğinden bu durumda desteklenen tek yetkilendirme yönteminin OAuth 2.0 olduğunu unutmayın.

Uzun süreli erişim jetonları ile ilgili bölümde, sunucu tarafı işlemler için kullanılabilecek çevrimdışı jetonların nasıl oluşturulacağı hakkında daha fazla bilgi verilmektedir.

İstemci kimliği ve istemci sırrı ile ilgili en iyi uygulamalar

Aynı istemci kimliğini ve gizli anahtar çiftini paylaşan tüm kodlar aynı erişim jetonlarını kullanabilir. İstemci kimliği ve istemci gizli anahtarlarına erişimi, kuruluşunuzdaki makine ve cihazlarda çalışan koda kısıtlamak en iyisidir.

İstemci kimliğinizi ve istemci sırrınızı yerel mobil uygulama kodunuza dahil etmeyin. Mobil cihazdan OAuth 2.0 kimlik doğrulaması yapan tüm geliştiriciler, isteğin yalnızca ekibiniz tarafından yayınlanan bir uygulamadan geldiğini doğrulamak için ek bilgi isteyen "Yüklü uygulama" istemci kimliğini kullanmalıdır.

Android cihazlarda, uygulamanız istemci kimliği ve istemci gizli anahtarı yerine paket adı ile imzalama sertifikası karmasının bir kombinasyonu kullanılarak tanımlanır. iOS cihazlarda paket kimliği ve uygulama mağazası kimliği kullanılır. Bu bilgileri almayla ilgili resmi dokümanları Google API Console yardım sayfasında bulabilirsiniz.

Hizmet hesapları YouTube API ile çalışmaz

Hizmet hesapları, ilişkili bir YouTube kanalı gerektirdiği ve yeni veya mevcut kanalları hizmet hesaplarıyla ilişkilendiremediğiniz için YouTube Data API çağrılarında kullanılamaz. YouTube Data API'yi çağırmak için bir hizmet hesabı kullanıyorsanız API sunucusu, hata türü unauthorized ve nedeni youtubeSignupRequired olarak ayarlanmış bir hata döndürür.

YouTube API'ye çevrimdışı/uzun süreli erişim

OAuth 2.0'da kısa ömürlü ve uzun ömürlü jetonlar vardır. Tek seferlik işlemler için kısa süreli erişim jetonları en iyi seçenektir. Bu jetonların süresi, verildikten kısa süre sonra dolar. Uzun süre çalışan işler için kısa ömürlü erişim jetonlarını almak üzere kullanılan bir yenileme jetonu edinmeyi düşünebilirsiniz.

Uygulamanızın kısa süreli erişim jetonu yerine uzun süreli yenileme jetonu almasını sağlamak için istemci kimliği oluştururken "Yüklü Uygulama" akışını kullanın ve "Yüklü uygulama türü" değeri için Other seçeneğini belirleyin:

Bu kullanım alanı için "Yüklü uygulama" akışını kullanmanız önerilir. Bir web uygulamasında YouTube API'ye uzun süreli erişiminiz gerekiyorsa ilk yetkilendirme isteğinde veya istemci yapılandırmanızda access_type parametresini offline, approval_prompt parametresini ise force olarak ayarlayarak erişim elde edebilirsiniz. Bazı istemci kitaplıkları, erişim jetonlarının getirilmesini ve yenilenmesini yönetir. Kendi özel yetkilendirme kodunuzu yazmak istiyorsanız Google Code blog'unda, kodunuzun temeli olarak kullanabileceğiniz bir blog yayını yayınladık.

Telefonlar, tabletler ve diğer cihazlarla OAuth 2.0'ı kullanma

Geliştiriciler, Android uygulamaları yazarken yetkilendirme ayrıntılarını işlemek için Google Play services'ten yararlanabilir. Google Play Hizmetleri, YouTube platformu API'leri dahil olmak üzere tüm Google API'leri için standart bir yetkilendirme akışı sunar. Bu yaklaşım, Android uygulamanızın kullanıcılarına ClientLogin kullanan özel kimlik doğrulamasından çok daha üstün bir kullanıcı deneyimi sunar.

Google, iOS cihazlarda iki seçenek sunar:

"İkinci ekran" olarak kullanılacak cihazlar veya kullanımı kolay giriş mekanizmaları olmayan televizyonlar gibi cihazlar için tercih edilen yaklaşım Cihazlar için OAuth 2.0'dır. Cihazlar için OAuth 2.0, yetkilendirme isteği gerektiğinde kullanıcıya benzersiz bir kod sunarak çalışır. Bu noktada kullanıcılardan dizüstü bilgisayar veya telefon gibi başka bir cihazda http://google.com/device'e gidip benzersiz kodu girmeleri istenir. Uygulama, aşağıdaki gibi görünen bir ekran gösterir:

Kullanıcı başka bir cihazda kodu girerken uygulama, kodun girilip girilmediğini kontrol etmek için düzenli aralıklarla anket yapar. Bu işlem tamamlandıktan sonra API çağrıları yapmak için bir jeton alır. Bu özelliğin nasıl çalıştığını görmek için web'e uyumlu herhangi bir cihazda çalıştırılabilen demoya göz atın. API, platforma bağlı değildir. Bu nedenle, web oluşturma özellikleri olmayan cihazlar için kullanışlıdır. Referans olarak kullanılacak demo için Python'da örnek kod yayınladık.

Özet

OAuth 2.0 yetkilendirmesi, YouTube yetkilendirmesi gerektiren geliştiricilere esneklik sağlar. ClientLogin ile aşina olan geliştiriciler, uygulamalarını OAuth 2.0 kullanacak şekilde ayarlamak için başlangıçta biraz daha fazla çalışma gerektiğini fark edebilirler. Ancak OAuth 2.0 uygulamaları, aktarıldıktan sonra son kullanıcılar için birden fazla platformda daha fazla esneklik, güvenlik ve kullanılabilirlik sunar.

OAuth 2.0 veya bu makaledeki örneklerle ilgili başka sorularınız varsa lütfen StackOverflow'da youtube-api etiketiyle sorun.