Bu belgede, telefon, tablet ve bilgisayar gibi cihazlara yüklenen uygulamaların, YouTube Analytics API'ye veya YouTube Reporting API'ye erişimi yetkilendirmek için Google'ın OAuth 2.0 uç noktalarını nasıl kullandığı açıklanmaktadır.
OAuth 2.0, kullanıcıların kullanıcı adlarını, şifrelerini ve diğer bilgilerini gizli tutarken belirli verileri bir uygulamayla paylaşmasına olanak tanır. Örneğin, bir uygulama kanalın YouTube Analytics verilerini almak üzere izin almak için OAuth 2.0'ı kullanabilir.
Yüklü uygulamalar cihazlara ayrı ayrı dağıtılır ve bu uygulamaların sır tutamayacağı varsayılır. Bu uygulamalar, kullanıcı uygulama arka planda çalışırken veya uygulama arka planda çalışırken Google API'lerine erişebilir.
Bu yetkilendirme akışı, web sunucusu uygulamaları için kullanılana benzer. Temel fark, yüklü uygulamaların sistem tarayıcısını açması ve Google'ın yetkilendirme sunucusundan gelen yanıtları işlemek için bir yerel yönlendirme URI'si sağlamasıdır.
Alternatifler
Mobil uygulamalarda Android veya iOS için Google ile Oturum Açma özelliğini kullanmayı tercih edebilirsiniz. Google ile Oturum Açma istemci kitaplıkları, kimlik doğrulama ve kullanıcı yetkilendirmesini yönetir ve uygulamaları burada açıklanan alt düzey protokole göre daha basit olabilir.
Bir sistem tarayıcısını desteklemeyen veya giriş yetenekleri sınırlı olan (TV'ler, oyun konsolları, kameralar veya yazıcılar gibi) cihazlarda çalışan uygulamalar için TV'ler ve Cihazlar için OAuth 2.0 ya da TV'lerde ve Sınırlı Giriş Cihazlarında Oturum Açma başlıklı makaleye bakın.
Kitaplıklar ve örnekler
Bu dokümanda açıklanan OAuth 2.0 akışını uygulamanıza yardımcı olması için aşağıdaki kitaplıkları ve örnekleri öneririz:
- Android için AppAuth kitaplığı
- iOS için AppAuth kitaplığı
- Uygulamalar için OAuth: Windows Sana Özel
Ön koşullar
Projeniz için API'leri etkinleştirin
Google API'lerini çağıran uygulamaların, bu API'leri API Consoleuygulamasında etkinleştirmesi gerekir.
Projenizde bir API'yi etkinleştirmek için:
- Open the API Library Google API Console.
- If prompted, select a project, or create a new one.
- YouTube Analytics API'yi ve YouTube Reporting API'yi bulup etkinleştirmek için Kitaplık sayfasını kullanın. YouTube Analytics verilerini alan birçok uygulama, YouTube Data API ile de arayüz oluşturur. Uygulamanızın kullanacağı diğer API'leri bulun ve bunları da etkinleştirin.
Yetkilendirme kimlik bilgileri oluşturma
Google API'lerine erişmek için OAuth 2.0 kullanan tüm uygulamaların, uygulamayı Google'ın OAuth 2.0 sunucusuna tanımlayan yetkilendirme kimlik bilgilerine sahip olması gerekir. Aşağıdaki adımlarda, projeniz için nasıl kimlik bilgileri oluşturacağınız açıklanmaktadır. Ardından uygulamalarınız bu projede etkinleştirdiğiniz API'lere erişmek için kimlik bilgilerini kullanabilir.
- Go to the Credentials page.
- Kimlik bilgisi oluştur > OAuth istemci kimliği seçeneğini tıklayın.
- Aşağıdaki bölümlerde, istemci türleri ve Google'ın yetkilendirme sunucusunun desteklediği yönlendirme yöntemleri açıklanmaktadır. Uygulamanız için önerilen istemci türünü seçin, OAuth istemcinize ad verin ve formdaki diğer alanları uygun şekilde ayarlayın.
Android
- Android uygulama türünü seçin.
- OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page kısmında gösterilir.
- Android uygulamanızın paket adını girin. Bu değer, uygulama manifest dosyanızdaki
<manifest>
öğesininpackage
özelliğinde tanımlanır. - Uygulama dağıtımının SHA-1 imza sertifikası parmak izini girin.
- Uygulamanız Google Play'den uygulama imzalama kullanıyorsa Play Console'un uygulama imzalama sayfasından SHA-1 parmak izini kopyalayın.
- Kendi anahtar deponuzu ve imzalama anahtarlarınızı yönetiyorsanız sertifika bilgilerini kullanıcıların okuyabileceği bir biçimde yazdırmak için Java ile birlikte sunulan keytool yardımcı programını kullanın. keytool çıkışının
Certificate fingerprints
bölümündekiSHA1
değerini kopyalayın. Daha fazla bilgi için Android için Google API'leri dokümanlarında yer alan İstemcinizin Kimliğini Doğrulama bölümüne bakın.
- (İsteğe bağlı) Android uygulamanızın sahipliğini doğrulayın.
- Oluştur'u tıklayın.
iOS
- iOS uygulama türünü seçin.
- OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page kısmında gösterilir.
- Uygulamanızın paket tanımlayıcısını girin. Paket kimliği, uygulamanızın bilgi özelliği listesi kaynak dosyasındaki (info.plist) CFBundleIdentifier anahtarının değeridir. Değer en sık genellikle Genel bölmesinde veya Xcode proje düzenleyicisinin İmzalama ve Özellikler bölmesinde gösterilir. Paket kimliği, Apple'ın App Store Connect sitesindeki uygulamanın Uygulama Bilgileri sayfasının Genel Bilgiler bölümünde de gösterilir.
- (İsteğe bağlı)
Uygulamanız Apple'ın App Store'unda yayınlanıyorsa uygulamanızın App Store kimliğini girin. Mağaza Kimliği, her Apple App Store URL'sine eklenen sayısal bir dizedir.
- iOS veya iPadOS cihazınızda Apple App Store uygulamasını açın.
- Uygulamanızı arayın.
- Paylaş düğmesini (kare ve yukarı ok simgesi) seçin.
- Bağlantıyı Kopyala'yı seçin.
- Bağlantıyı bir metin düzenleyiciye yapıştırın. App Store kimliği, URL'nin son kısmıdır.
Örnek:
https://apps.apple.com/app/google/id284815942
- (İsteğe bağlı)
Ekip kimliğinizi girin. Daha fazla bilgi için Apple Geliştirici Hesabı belgelerinde Ekip Kimliğinizi bulma bölümüne bakın.
- Oluştur'u tıklayın.
ultra geniş bant
- Evrensel Windows Platformu uygulama türünü seçin.
- OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page kısmında gösterilir.
- Uygulamanızın 12 karakterli Microsoft Store kimliğini girin. Bu değeri, Microsoft İş Ortağı Merkezi'ndeki Uygulama kimliği sayfasının Uygulama yönetimi bölümünde bulabilirsiniz.
- Oluştur'u tıklayın.
UWP uygulamaları için özel URI şeması 39 karakterden uzun olamaz.
Özel URI şeması (Android, iOS, UWP)
Özel URI şemaları, uygulamanızı açmak için özel olarak tanımlanmış bir şema kullanan bir derin bağlantı biçimidir.
Android'de özel URI şemaları kullanmaya alternatifOAuth 2.0 yanıtını doğrudan uygulamanıza dağıtarak yönlendirme URI'si ihtiyacını ortadan kaldıran Android için Google ile Oturum Açma SDK'sı özelliğini kullanın.
Android için Google ile Oturum Açma SDK'sına geçiş yapma
Şu anda Android'de OAuth entegrasyonunuz için özel bir şema kullanıyorsanız, Android SDK'sı için önerilen Google Oturum Açma özelliğini kullanmaya tam olarak geçmek üzere aşağıdaki işlemleri tamamlamanız gerekir:
- Kodunuzu, Google ile Oturum Açma SDK'sını kullanacak şekilde güncelleyin.
- Google API Konsolu'nda özel şema desteğini devre dışı bırakın.
Google ile Oturum Açma Android SDK'sına geçiş yapmak için aşağıdaki adımları uygulayın:
-
Google ile Oturum Açma Android SDK'sını kullanmak için kodunuzu güncelleyin:
-
Google'ın OAuth 2.0 sunucusuna
nereden istek gönderdiğinizi belirlemek için kodunuzu inceleyin. Özel şema kullanıyorsanız isteğiniz aşağıdaki gibi görünür:
https://accounts.google.com/o/oauth2/v2/auth? scope=<SCOPES>& response_type=code& &state=<STATE>& redirect_uri=com.example.app:/oauth2redirect& client_id=<CLIENT_ID>
com.example.app:/oauth2redirect
, yukarıdaki örnekte bulunan özel şema yönlendirme URI'sidir. Özel URI şema değerinin biçimi hakkında daha fazla ayrıntı içinredirect_uri
parametre tanımına bakın. -
Google ile Oturum Açma SDK'sını yapılandırmak için ihtiyaç duyacağınız
scope
veclient_id
istek parametrelerini not edin. -
SDK'yı ayarlamak için
Google ile Oturum Açma'yı Android Uygulamanıza Entegre Etmeye Başlayın talimatlarını uygulayın. Önceki adımda aldığınız
client_id
adresini yeniden kullanacağınız gibi Arka uç sunucunuzun OAuth 2.0 istemci kimliğini alın adımını atlayabilirsiniz. -
Sunucu Tarafı API erişimini etkinleştirme talimatlarını uygulayın. Bunun için aşağıdaki adımlar gerekir:
-
İzin istediğiniz kapsamlar için yetkilendirme kodu almak üzere
getServerAuthCode
yöntemini kullanın. - Erişim ve yenileme jetonuyla değiştirmek için yetkilendirme kodunu uygulamanızın arka ucuna gönderin.
- Kullanıcı adına Google API'lerine çağrı yapmak için alınan erişim jetonunu kullanın.
-
İzin istediğiniz kapsamlar için yetkilendirme kodu almak üzere
-
Google'ın OAuth 2.0 sunucusuna
nereden istek gönderdiğinizi belirlemek için kodunuzu inceleyin. Özel şema kullanıyorsanız isteğiniz aşağıdaki gibi görünür:
-
Google API Konsolu'nda özel şema desteğini devre dışı bırakın:
- OAuth 2.0 kimlik bilgileri listenize gidin ve Android istemcinizi seçin.
- Gelişmiş Ayarlar bölümüne gidin, Özel URI Şemasını Etkinleştir onay kutusunun işaretini kaldırın ve özel URI şeması desteğini devre dışı bırakmak için Kaydet'i tıklayın.
Özel URI şeması etkinleştiriliyor
Önerilen alternatif size uygun değilse aşağıdaki talimatları uygulayarak Android istemciniz için özel URI şemalarını etkinleştirebilirsiniz:- OAuth 2.0 kimlik bilgileri listenize gidin ve Android istemcinizi seçin.
- Gelişmiş Ayarlar bölümüne gidin, Özel URI Şemasını Etkinleştir onay kutusunu işaretleyin ve özel URI şeması desteğini etkinleştirmek için Kaydet'i tıklayın.
OAuth 2.0 yanıtını doğrudan uygulamanıza göndererek yönlendirme URI'si ihtiyacını ortadan kaldıran Chrome Identity API'yi kullanın.
Uygulama sahipliğini doğrulama (Android, Chrome)
Uygulamanın kimliğine bürünme riskini azaltmak için uygulamanızın sahipliğini doğrulayabilirsiniz.
Android
Varsa ve uygulamanız Google Play Console'da kayıtlıysa doğrulama işlemini tamamlamak için Google Play Geliştirici Hesabınızı kullanabilirsiniz. Doğrulamanın başarılı olması için aşağıdaki koşulların karşılanması gerekir:
- Google Play Console'da, doğrulamayı tamamladığınız Android OAuth istemcisiyle aynı paket adına ve SHA-1 imza sertifikası parmak izine sahip kayıtlı bir uygulamanız olmalıdır.
- Google Play Console'da uygulama için Yönetici iznine sahip olmanız gerekir. Google Play Console'da erişim yönetimi hakkında daha fazla bilgi edinin.
Android istemcisinin Uygulama Sahipliğini Doğrula bölümünde, doğrulama işlemini tamamlamak için Sahipliği Doğrula düğmesini tıklayın.
Doğrulama başarılı olursa doğrulama işleminin başarılı olduğunu onaylayan bir bildirim gösterilir. Aksi takdirde bir hata istemi gösterilir.
Başarısız doğrulama sorununu gidermek için lütfen aşağıdakileri deneyin:
- Doğruladığınız uygulamanın Google Play Console'da kayıtlı bir uygulama olduğundan emin olun.
- Google Play Console'da uygulama için Yönetici iznine sahip olduğunuzdan emin olun.
Chrome
Doğrulama sürecini tamamlamak için Chrome Web Mağazası Geliştirici hesabınızı kullanırsınız. Doğrulama işleminin başarılı olması için aşağıdaki koşulların karşılanması gerekir:
- Chrome Web Mağazası Geliştirici Kontrol Paneli'nde, doğrulama işlemini tamamladığınız Chrome Uzantısı OAuth istemcisiyle aynı öğe kimliğine sahip kayıtlı bir öğenizin olması gerekir.
- Chrome Web Mağazası öğesi için bir yayıncı olmanız gerekir. Chrome Web Mağazası Geliştirici Kontrol Paneli'nden erişim yönetimi hakkında daha fazla bilgi edinin.
Doğrulama işlemini tamamlamak için Chrome Uzantı istemcisinin Uygulama Sahipliğini Doğrula bölümünde Sahipliği Doğrula düğmesini tıklayın.
Not: Hesabınıza erişim izni verdikten sonra doğrulama işlemini tamamlamadan önce lütfen birkaç dakika bekleyin.
Doğrulama başarılı olursa doğrulama işleminin başarılı olduğunu onaylayan bir bildirim gösterilir. Aksi takdirde bir hata istemi gösterilir.
Başarısız doğrulama sorununu gidermek için lütfen aşağıdakileri deneyin:
- Chrome Web Mağazası Geliştirici Kontrol Paneli'nde, doğrulama işlemini tamamladığınız Chrome Uzantısı OAuth istemcisiyle aynı öğe kimliğine sahip kayıtlı bir öğe bulunduğundan emin olun.
- Uygulamanın yayıncısı olduğunuzdan, yani uygulamanın bağımsız yayıncısı veya grup yayıncısının bir üyesi olduğunuzdan emin olun. Chrome Web Mağazası Geliştirici Kontrol Paneli'nde erişim yönetimi hakkında daha fazla bilgi edinin.
- Grup yayıncı listenizi yeni güncellediyseniz Chrome Web Mağazası Geliştirici Kontrol Paneli'nde grup yayıncı üyelik listesinin senkronize edildiğini doğrulayın. Yayıncı üyeliği listenizi senkronize etme hakkında daha fazla bilgi edinin.
Geri Döngü IP adresi (macOS, Linux, Windows masaüstü)
Yetkilendirme kodunu bu URL'yi kullanarak almak için uygulamanızın yerel web sunucusunu dinliyor olması gerekir. Bu, tüm platformlarda olmasa da birçok platformda mümkün. Ancak platformunuz destekliyorsa yetkilendirme kodunu almak için önerilen yöntem budur.
Uygulamanız yetkilendirme yanıtını aldığında, en iyi kullanılabilirlik için kullanıcıya tarayıcıyı kapatıp uygulamanıza geri dönmesini söyleyen bir HTML sayfası göstererek yanıt vermelidir.
Önerilen kullanım | macOS, Linux ve Windows masaüstü (Universal Windows Platform değil) uygulamaları |
Form değerleri | Uygulama türünü Masaüstü uygulaması olarak ayarlayın. |
Manuel kopyalama/yapıştırma
Erişim kapsamlarını tanımlama
Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim isteğinde bulunmasını sağlarken kullanıcıların da uygulamanıza verdikleri erişim miktarını kontrol etmesine olanak tanır. Dolayısıyla, talep edilen kapsam sayısı ile kullanıcı izni alma olasılığı arasında ters bir ilişki olabilir.
OAuth 2.0 yetkilendirmesini uygulamaya başlamadan önce uygulamanızın erişmek için izne ihtiyaç duyacağı kapsamları belirlemenizi öneririz.
YouTube Analytics API'de aşağıdaki kapsamlar kullanılır:
Kapsamlar | |
---|---|
https://www.googleapis.com/auth/youtube | YouTube hesabınızı yönetin |
https://www.googleapis.com/auth/youtube.readonly | YouTube hesabınızı görüntüleyin |
https://www.googleapis.com/auth/youtubepartner | Varlıklarınızı ve ilişkili içeriği YouTube'da görüntüleyin ve yönetin |
https://www.googleapis.com/auth/yt-analytics-monetary.readonly | YouTube içeriğiniz için parasal ve parasal olmayan YouTube Analytics raporlarını görüntüleyin |
https://www.googleapis.com/auth/yt-analytics.readonly | YouTube içeriğiniz için YouTube Analytics raporlarını görüntüleyin |
YouTube Reporting API aşağıdaki kapsamları kullanır:
Kapsamlar | |
---|---|
https://www.googleapis.com/auth/yt-analytics-monetary.readonly | YouTube içeriğiniz için parasal ve parasal olmayan YouTube Analytics raporlarını görüntüleyin |
https://www.googleapis.com/auth/yt-analytics.readonly | YouTube içeriğiniz için YouTube Analytics raporlarını görüntüleyin |
OAuth 2.0 API Kapsamları belgesi, Google API'lerine erişmek için kullanabileceğiniz kapsamların tam listesini içerir.
OAuth 2.0 erişim jetonları alma
Aşağıdaki adımlarda uygulamanızın, kullanıcı adına API isteği gerçekleştirme izni almak için Google'ın OAuth 2.0 sunucusuyla nasıl etkileşimde bulunduğu gösterilmektedir. Uygulamanızın kullanıcı yetkilendirmesi gerektiren bir Google API isteğini yürütmesi için önce bu izni almış olması gerekir.
1. Adım: Kod doğrulayıcı ve sorgulama oluşturun
Google, yüklenen uygulama akışını daha güvenli hale getirmek amacıyla Code Exchange için Kanıt Anahtarı (PKCE) protokolünü destekler. Her yetkilendirme isteği için benzersiz bir kod doğrulayıcı oluşturulur ve bu kod doğrulayıcının "code_challenge" adı verilen dönüştürülmüş değeri, yetkilendirme kodunu almak için yetkilendirme sunucusuna gönderilir.
Kod doğrulayıcıyı oluşturma
code_verifier
, ayrılmamış
[A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~" karakterlerinin kullanıldığı, minimum 43 karakter ve maksimum 128 karakter uzunluğunda entropili rastgele bir dizedir.
Kod doğrulayıcı, değerin tahmin edilmesini zorlaştıracak kadar entropiye sahip olmalıdır.
Kod sorgulamasını oluşturma
Kod sorgulaması oluşturmanın iki yöntemi desteklenir.
Kod Meydan Okuması Oluşturma Yöntemleri | |
---|---|
S256 (önerilir) | Kod zorluğu, kod doğrulayıcının Base64URL (dolgu olmadan) kodlamalı SHA256 karmasıdır.
|
düz | Kod sorgulaması, yukarıda oluşturulan kod doğrulayıcıyla aynı değerdir.
|
2. Adım: Google'ın OAuth 2.0 sunucusuna bir istek gönderin
Kullanıcı yetkilendirmesi almak için Google'ın https://accounts.google.com/o/oauth2/v2/auth
adresinden yetkilendirme sunucusuna bir istek gönderin. Bu uç nokta etkin oturum aramasını işler, kullanıcının kimliğini doğrular ve kullanıcı izni alır. Uç noktaya yalnızca SSL üzerinden erişilebilir ve HTTP (SSL olmayan) bağlantıları reddeder.
Yetkilendirme sunucusu, yüklü uygulamalar için aşağıdaki sorgu dizesi parametrelerini destekler:
Parametreler | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
client_id |
Zorunlu
Uygulamanızın istemci kimliği. Bu değeri API Console Credentials pageiçinde bulabilirsiniz. |
||||||||||||||||||
redirect_uri |
Zorunlu
Google'ın yetkilendirme sunucusunun uygulamanıza nasıl yanıt göndereceğini belirler. Yüklü uygulamalar için kullanılabilecek çeşitli yönlendirme seçenekleri vardır ve yetkilendirme kimlik bilgilerinizi belirli bir yönlendirme yöntemini göz önünde bulundurarak ayarlamanız gerekir. Değer, OAuth 2.0 istemcisi için, istemcinizin API Console
Credentials pagebölümünde yapılandırdığınız yetkili yönlendirme URI'lerinden biriyle tam olarak eşleşmelidir. Bu değer yetkili bir URI ile eşleşmezse Aşağıdaki tabloda her yöntem için uygun
|
||||||||||||||||||
response_type |
Zorunlu
Google OAuth 2.0 uç noktasının bir yetkilendirme kodu döndürüp döndürmeyeceğini belirler. Yüklü uygulamalar için parametre değerini |
||||||||||||||||||
scope |
Zorunlu
Uygulamanızın kullanıcı adına erişebileceği kaynakları tanımlayan, boşlukla sınırlandırılmış bir kapsam listesi. Bu değerler, Google'ın kullanıcıya gösterdiği izin ekranını bilgilendirir. Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim isteğinde bulunmasına ve kullanıcıların uygulamanıza verdikleri erişim miktarını kontrol etmesine olanak tanır. Dolayısıyla, talep edilen kapsam sayısı ile kullanıcı izni alma olasılığı arasında ters bir ilişki vardır. YouTube Analytics API'de aşağıdaki kapsamlar kullanılır:
YouTube Reporting API aşağıdaki kapsamları kullanır:
OAuth 2.0 API Kapsamları belgesi, Google API'lerine erişmek için kullanabileceğiniz kapsamların tam listesini sağlar. |
||||||||||||||||||
code_challenge |
Önerilen
Yetkilendirme kod değişimi sırasında sunucu tarafı sorgulama olarak kullanılacak kodlanmış |
||||||||||||||||||
code_challenge_method |
Önerilen
Yetkilendirme kodu değişimi sırasında kullanılacak bir |
||||||||||||||||||
state |
Önerilen
Uygulamanızın yetkilendirme isteğiniz ile yetkilendirme sunucusunun yanıtı arasındaki durumu korumak için kullandığı herhangi bir dize değerini belirtir.
Sunucu, kullanıcı uygulamanızın erişim isteğini kabul ettikten veya reddettikten sonra Bu parametreyi, kullanıcıyı uygulamanızdaki doğru kaynağa yönlendirmek, nonce göndermek ve siteler arası istek sahtekarlığını azaltmak gibi çeşitli amaçlarla kullanabilirsiniz. |
||||||||||||||||||
login_hint |
İsteğe bağlı
Uygulamanız hangi kullanıcının kimlik doğrulaması yapmaya çalıştığını biliyorsa Google Kimlik Doğrulama Sunucusu'na ipucu sağlamak için bu parametreyi kullanabilir. Sunucu, oturum açma formundaki e-posta alanını önceden doldurarak veya uygun çoklu giriş oturumunu seçerek giriş akışını basitleştirmek için ipucunu kullanır. Parametre değerini, bir e-posta adresi veya kullanıcının Google kimliğine eşdeğer olan bir |
Örnek yetkilendirme URL'leri
Aşağıdaki sekmeler, farklı yönlendirme URI'si seçenekleri için örnek yetkilendirme URL'lerini gösterir.
Her URL, kullanıcının YouTube Analytics raporlarını almasına izin veren bir kapsama erişim ister.URL'ler, redirect_uri
parametresinin değeri dışında aynı. URL'ler ayrıca gerekli response_type
ve client_id
parametrelerinin yanı sıra isteğe bağlı state
parametresini de içerir. Her URL'de okunabilirlik için satır sonları ve boşluklar bulunur.
Özel URI şeması
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyt-analytics.readonly& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=com.example.app%3A/oauth2redirect& client_id=client_id
Geri Döngü IP adresi
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyt-analytics.readonly& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=http%3A//127.0.0.1%3A9004& client_id=client_id
3. adım: Google, kullanıcıdan izin ister
Bu adımda kullanıcı, uygulamanıza istenen erişimi verip vermeyeceğini belirler. Google, bu aşamada uygulamanızın adını ve kullanıcının yetkilendirme kimlik bilgileriyle erişim izni istediği Google API hizmetlerini gösteren bir izin penceresi ve verilecek erişim kapsamlarının bir özetini gösterir. Daha sonra kullanıcı, uygulamanız tarafından istenen bir veya daha fazla kapsama erişim izni verebilir veya isteği reddedebilir.
Google'ın OAuth 2.0 sunucusundan, herhangi bir erişim izni verilip verilmediğini belirten bir yanıt beklediği için uygulamanızın bu aşamada herhangi bir şey yapması gerekmez. Bu yanıt aşağıdaki adımda açıklanmaktadır.
Hatalar
Google'ın OAuth 2.0 yetkilendirme uç noktasına gönderilen istekler, beklenen kimlik doğrulama ve yetkilendirme akışları yerine kullanıcılara yönelik hata mesajları gösterebilir. Yaygın hata kodları ve önerilen çözümler aşağıda listelenmiştir.
admin_policy_enforced
Google Hesabı, Google Workspace yöneticisinin politikaları nedeniyle istenen bir veya daha fazla kapsamı yetkilendiremedi. OAuth istemci kimliğinize açıkça erişim verilene kadar bir yöneticinin tüm kapsamlara ya da hassas ve kısıtlanmış kapsamlara erişimi nasıl kısıtlayabileceği hakkında daha fazla bilgi için Hangi üçüncü taraf uygulamalarının ve dahili uygulamaların Google Workspace verilerine erişebileceğini kontrol etme konulu Google Workspace Yöneticisi yardım makalesine göz atın.
disallowed_useragent
Yetkilendirme uç noktası, Google'ın OAuth 2.0 Politikaları tarafından izin verilmeyen yerleşik bir kullanıcı aracısının içinde görüntülenir.
Android
Android geliştiricileri, android.webkit.WebView
ürününde yetkilendirme isteklerini açarken bu hata mesajıyla karşılaşabilir.
Geliştiriciler bunun yerine Android için Google ile Oturum Açma veya RFC Foundation'ın AppAuth for Android gibi Android kitaplıklarını kullanmalıdır.
Bir Android uygulaması yerleşik kullanıcı aracısında genel bir web bağlantısı açtığında ve kullanıcı sitenizden Google'ın OAuth 2.0 yetkilendirme uç noktasına gittiğinde web geliştiricileri bu hatayla karşılaşabilir. Geliştiriciler, işletim sisteminin varsayılan bağlantı işleyicisinde (hem Android App Links işleyicilerini hem de varsayılan tarayıcı uygulamasını içeren) genel bağlantıların açılmasına izin vermelidir. Android Özel Sekmeleri kitaplığı da desteklenen bir seçenektir.
iOS
iOS ve macOS geliştiricileri, WKWebView
ürününde yetkilendirme isteklerini açarken bu hatayla karşılaşabilir.
Geliştiriciler bunun yerine iOS için Google ile Oturum Açma gibi iOS kitaplıklarını veya COPPA Vakfı'nın iOS için AppAuth dosyasını kullanmalıdır.
Bir iOS veya macOS uygulaması, yerleştirilmiş kullanıcı aracısında genel bir web bağlantısı açıp bir kullanıcı sitenizden Google'ın OAuth 2.0 yetkilendirme uç noktasına gittiğinde web geliştiricileri bu hatayla karşılaşabilir. Geliştiriciler, genel bağlantıların işletim sisteminin varsayılan bağlantı işleyicisinde açılmasına izin vermelidir. Bu bağlantı, hem Geçiş Bağlantıları işleyicileri hem de varsayılan tarayıcı uygulamasını içerir. SFSafariViewController
kitaplığı da desteklenen bir seçenektir.
org_internal
İstekteki OAuth istemci kimliği, belirli bir Google Cloud kuruluşundaki Google Hesaplarına erişimi sınırlayan bir projenin parçası. Bu yapılandırma seçeneği hakkında daha fazla bilgi için OAuth izin ekranınızı ayarlama yardım makalesinin Kullanıcı türü bölümüne bakın.
invalid_grant
Kod doğrulayıcı ve sorgulama kullanıyorsanız code_callenge
parametresi geçersiz veya eksiktir. code_challenge
parametresinin doğru şekilde ayarlandığından emin olun.
Bir erişim jetonunu yenilerken jetonun süresi dolmuş veya geçersiz hale gelmiş olabilir. Kullanıcının kimliğini tekrar doğrulayın ve yeni jetonlar almak için kullanıcıdan izin isteyin. Bu hatayı görmeye devam ediyorsanız uygulamanızın doğru şekilde yapılandırıldığından ve isteğinizde doğru jeton ve parametreleri kullandığınızdan emin olun. Aksi takdirde, kullanıcı hesabı silinmiş veya devre dışı bırakılmış olabilir.
redirect_uri_mismatch
Yetkilendirme isteğinde iletilen redirect_uri
, OAuth istemci kimliğine ait yetkili yönlendirme URI'siyle eşleşmiyor. Google API Console Credentials pageiçindeki yetkili yönlendirme URI'lerini inceleyin.
İletilen redirect_uri
, istemci türü için geçersiz olabilir.
redirect_uri
parametresi, kullanımdan kaldırılan ve artık desteklenmeyen OAuth bant dışı (OOB) akışına işaret ediyor olabilir. Entegrasyonunuzu güncellemek için taşıma rehberine bakın.
invalid_request
Talebinizle ilgili bir sorun oluştu. Bunun birkaç nedeni olabilir:
- İstek düzgün biçimlendirilmemiş
- İstekte gerekli parametreler eksikti
- İstek, Google'ın desteklemediği bir yetkilendirme yöntemi kullanıyor. OAuth entegrasyonunuzun önerilen bir entegrasyon yöntemini kullandığını doğrulama
- Yönlendirme URI'si için özel bir şema kullanılır : Chrome uygulamalarında özel URI şeması desteklenmiyor veya Özel URI şeması, Android istemciniz için etkin değil hata mesajını görüyorsanız bu, Chrome uygulamalarında desteklenmeyen ve Android'de varsayılan olarak devre dışı olan özel bir URI şeması kullandığınız anlamına gelir. Özel URI şeması alternatifleri hakkında daha fazla bilgi edinin.
4. Adım: OAuth 2.0 sunucu yanıtını yönetin
Uygulamanızın yetkilendirme yanıtını alma şekli, kullandığı yönlendirme URI şemasına bağlıdır. Şemadan bağımsız olarak yanıt, yetkilendirme kodu (code
) veya hata (error
) içerir. Örneğin error=access_denied
, kullanıcının isteği reddettiğini gösterir.
Kullanıcı, uygulamanıza erişim izni verirse sonraki adımda açıklandığı şekilde yetkilendirme kodunu erişim jetonu ve yenileme jetonu ile değiştirebilirsiniz.
5. Adım: Yenileme ve erişim jetonları için yetkilendirme kodunu değiştirin
Erişim jetonuyla yetkilendirme kodu değişimi yapmak için https://oauth2.googleapis.com/token
uç noktasını çağırın ve aşağıdaki parametreleri ayarlayın:
Alanlar | |
---|---|
client_id |
Credentials pageiçinden API Console alınan istemci kimliği. |
client_secret |
Credentials pageöğesinden alınan istemci gizli anahtarı API Console. |
code |
İlk istekten döndürülen yetkilendirme kodu. |
code_verifier |
1. adımda oluşturduğunuz kod doğrulayıcı. |
grant_type |
OAuth 2.0 spesifikasyonunda tanımlandığı gibi, bu alanın değeri authorization_code olarak ayarlanmalıdır. |
redirect_uri |
Belirtilen client_id için API Console
Credentials page içinde projenizle ilgili olarak listelenen yönlendirme URI'lerinden biri. |
Aşağıdaki snippet'te örnek bir istek gösterilmektedir:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=your_client_id& client_secret=your_client_secret& redirect_uri=http://127.0.0.1:9004& grant_type=authorization_code
Google, bu isteğe kısa ömürlü erişim jetonu ve yenileme jetonu içeren bir JSON nesnesi döndürerek yanıt verir.
Yanıt aşağıdaki alanları içerir:
Alanlar | |
---|---|
access_token |
Uygulamanızın bir Google API isteğini yetkilendirmek için gönderdiği jeton. |
expires_in |
Erişim jetonunun saniye cinsinden kalan ömrü. |
id_token |
Not: Bu özellik yalnızca isteğiniz openid , profile veya email gibi bir kimlik kapsamı içeriyorsa döndürülür. Değer, kullanıcı hakkında dijital olarak imzalanmış kimlik bilgilerini içeren bir JSON Web Token'dır (JWT). |
refresh_token |
Yeni bir erişim jetonu almak için kullanabileceğiniz jeton. Yenileme jetonları, kullanıcı erişimi iptal edene kadar geçerlidir. Yenileme jetonlarının yüklü uygulamalar için her zaman döndürüldüğünü unutmayın. |
scope |
access_token tarafından verilen erişim kapsamları, boşlukla sınırlandırılmış, büyük/küçük harfe duyarlı dizelerin bir listesi olarak ifade edilir. |
token_type |
Döndürülen jetonun türü. Şu anda bu alanın değeri her zaman Bearer olarak ayarlanmıştır. |
Aşağıdaki snippet örnek bir yanıt gösterir:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/yt-analytics.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
Google API'lerini çağırma
Uygulamanız bir erişim jetonu aldıktan sonra, API'nin ihtiyaç duyduğu erişim kapsamları verildiyse bu jetonu belirli bir kullanıcı hesabı adına Google API'ye çağrı yapmak için kullanabilirsiniz. Bunu yapmak için bir access_token
sorgu parametresi veya Authorization
HTTP başlığı Bearer
değeri ekleyerek API'ye yapılan bir isteğe erişim jetonunu dahil edin. Sorgu dizeleri, sunucu günlüklerinde genellikle görünür olduğundan, mümkünse HTTP üst bilgisi tercih edilir. Çoğu durumda, Google API'lerine yapılan çağrılarınızı ayarlamak için bir istemci kitaplığı kullanabilirsiniz (örneğin, YouTube Analytics API'yi çağırırken).
YouTube Analytics API'nin, hizmet hesabı akışını desteklemediğini unutmayın. YouTube Reporting API yalnızca plak şirketleri ve film stüdyoları gibi birden fazla YouTube kanalına sahip ve yöneten YouTube içerik sahipleri için hizmet hesaplarını destekler.
Tüm Google API'lerini deneyebilir ve OAuth 2.0 Playground'da kapsamlarını görüntüleyebilirsiniz.
HTTP GET örnekleri
Authorization: Bearer
HTTP üst bilgisi kullanılarak
reports.query
uç noktasına (YouTube Analytics API) yapılan çağrı aşağıdaki gibi görünebilir. Kendi erişim jetonunuzu belirtmeniz gerektiğini unutmayın:
GET /youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
Aşağıda, access_token
sorgu dizesi parametresini kullanarak kimliği doğrulanmış kullanıcı için aynı API'ye yapılan bir çağrıyı görebilirsiniz:
GET https://www.googleapis.com/youtube/analytics/v1/reports?access_token=access_token&ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views
curl
örnekleri
Bu komutları curl
komut satırı uygulamasıyla test edebilirsiniz. HTTP üstbilgisi seçeneğini kullanan bir örneği burada bulabilirsiniz (tercih edilen):
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views
Alternatif olarak, sorgu dizesi parametre seçeneği şu şekildedir:
curl https://www.googleapis.com/youtube/analytics/v1/reports?access_token=access_token&ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views
Erişim jetonunu yenileme
Erişim jetonlarının süresi belirli aralıklarla sona erer ve ilgili API isteği için geçersiz kimlik bilgileri haline gelir. Jetonla ilişkili kapsamlara çevrimdışı erişim isteğinde bulunduysanız erişim jetonunu kullanıcıdan izin istemeden (kullanıcının mevcut olmadığı zamanlar dahil) yenileyebilirsiniz.
Uygulamanız, bir erişim jetonunu yenilemek için Google'ın yetkilendirme sunucusuna (https://oauth2.googleapis.com/token
) aşağıdaki parametreleri içeren bir HTTPS POST
isteği gönderir:
Alanlar | |
---|---|
client_id |
API Consoleöğesinden alınan istemci kimliği. |
client_secret |
API Consoleöğesinden alınan istemci gizli anahtarı.
(client_secret , Android, iOS veya Chrome uygulaması olarak kayıtlı istemcilerden gelen istekler için geçerli değildir.)
|
grant_type |
OAuth 2.0 spesifikasyonunda tanımlandığı gibi, bu alanın değeri refresh_token olarak ayarlanmalıdır. |
refresh_token |
Yetkilendirme kodu exchange'inden döndürülen yenileme jetonu. |
Aşağıdaki snippet'te örnek bir istek gösterilmektedir:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=your_client_id& client_secret=your_client_secret& refresh_token=refresh_token& grant_type=refresh_token
Kullanıcı, uygulamaya verilen erişimi iptal etmediği sürece jeton sunucusu, yeni bir erişim jetonu içeren bir JSON nesnesi döndürür. Aşağıdaki snippet'te örnek bir yanıt gösterilmektedir:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "token_type": "Bearer" }
Verilecek yenileme jetonlarının sayısının sınırlı olduğunu unutmayın. Bunlar, tüm istemcilerde istemci/kullanıcı kombinasyonu başına bir ve kullanıcı başına başka bir sınırdır. Yenileme jetonlarını uzun süreli depolama alanına kaydetmeniz ve geçerli kaldıkları sürece kullanmaya devam etmeniz gerekir. Uygulamanız çok fazla yenileme jetonu isterse bu sınırlarla karşılaşabilir. Bu durumda, eski yenileme jetonları çalışmayı durdurur.
Jetonu iptal etme
Bazı durumlarda, bir kullanıcı bir uygulamaya verilen erişimi iptal etmek isteyebilir. Kullanıcı, Hesap Ayarları'na giderek erişimi iptal edebilir. Daha fazla bilgi için destek dokümanında, Hesabınıza erişimi olan üçüncü taraf siteler ve uygulamaların site veya uygulama erişimini kaldırma bölümüne bakın.
Bir uygulamanın, kendisine verilen erişimi programlı olarak iptal etmesi de mümkündür. Kullanıcının abonelikten çıktığı, bir uygulamayı kaldırdığı veya bir uygulamanın gerektirdiği API kaynaklarının önemli ölçüde değiştiği durumlarda programlı iptal önemlidir. Diğer bir deyişle, kaldırma sürecinin bir bölümü, uygulamaya daha önce verilmiş izinlerin kaldırıldığından emin olmak için bir API isteğini içerebilir.
Uygulamanız, bir jetonu programlı bir şekilde iptal etmek için https://oauth2.googleapis.com/revoke
kaynağına istek gönderir ve jetonu parametre olarak ekler:
curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \ https://oauth2.googleapis.com/revoke?token={token}
Bu jeton bir erişim jetonu veya yenileme jetonu olabilir. Jeton bir erişim jetonuysa ve buna karşılık gelen bir yenileme jetonu varsa yenileme jetonu da iptal edilir.
İptal başarıyla işlenirse yanıtın HTTP durum kodu 200
olur. Hata koşulları için hata koduyla birlikte 400
HTTP durum kodu döndürülür.
Diğer Okumalar
IETF Best Current Practice OAuth 2.0 for Native Apps burada, burada ele alınan en iyi uygulamaların birçoğunu bulabilirsiniz.