Mobil ve Masaüstü Uygulamaları için OAuth 2.0

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:

Ö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:

  1. Open the API Library Google API Console.
  2. If prompted, select a project, or create a new one.
  3. 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.

  1. Go to the Credentials page.
  2. Kimlik bilgisi oluştur > OAuth istemci kimliği seçeneğini tıklayın.
  3. 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
  1. Android uygulama türünü seçin.
  2. OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page kısmında gösterilir.
  3. Android uygulamanızın paket adını girin. Bu değer, uygulama manifest dosyanızdaki <manifest> öğesinin package özelliğinde tanımlanır.
  4. 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ündeki SHA1 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.
  5. (İsteğe bağlı) Android uygulamanızın sahipliğini doğrulayın.
  6. Oluştur'u tıklayın.
iOS
  1. iOS uygulama türünü seçin.
  2. OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page kısmında gösterilir.
  3. 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.
  4. (İ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.

    1. iOS veya iPadOS cihazınızda Apple App Store uygulamasını açın.
    2. Uygulamanızı arayın.
    3. Paylaş düğmesini (kare ve yukarı ok simgesi) seçin.
    4. Bağlantıyı Kopyala'yı seçin.
    5. 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

  5. (İ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.

  6. Oluştur'u tıklayın.
ultra geniş bant
  1. Evrensel Windows Platformu uygulama türünü seçin.
  2. OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page kısmında gösterilir.
  3. 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.
  4. 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 alternatif

OAuth 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:

  1. Kodunuzu, Google ile Oturum Açma SDK'sını kullanacak şekilde güncelleyin.
  2. 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:

  1. Google ile Oturum Açma Android SDK'sını kullanmak için kodunuzu güncelleyin:
    1. 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çin redirect_uri parametre tanımına bakın.
    2. Google ile Oturum Açma SDK'sını yapılandırmak için ihtiyaç duyacağınız scope ve client_id istek parametrelerini not edin.
    3. 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.
    4. Sunucu Tarafı API erişimini etkinleştirme talimatlarını uygulayın. Bunun için aşağıdaki adımlar gerekir:
      1. İzin istediğiniz kapsamlar için yetkilendirme kodu almak üzere getServerAuthCode yöntemini kullanın.
      2. Erişim ve yenileme jetonuyla değiştirmek için yetkilendirme kodunu uygulamanızın arka ucuna gönderin.
      3. Kullanıcı adına Google API'lerine çağrı yapmak için alınan erişim jetonunu kullanın.
  2. Google API Konsolu'nda özel şema desteğini devre dışı bırakın:
    1. OAuth 2.0 kimlik bilgileri listenize gidin ve Android istemcinizi seçin.
    2. 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:
  1. OAuth 2.0 kimlik bilgileri listenize gidin ve Android istemcinizi seçin.
  2. 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.
Chrome uygulamalarında özel URI şemaları kullanmaya alternatif olarak

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.
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
düz Kod sorgulaması, yukarıda oluşturulan kod doğrulayıcıyla aynı değerdir.
code_challenge = code_verifier

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 redirect_uri_mismatch hatası alırsınız.

Aşağıdaki tabloda her yöntem için uygun redirect_uri parametre değeri gösterilmektedir:

redirect_uri değerleri
Özel URI şeması com.example.app:redirect_uri_path

veya

com.googleusercontent.apps.123:redirect_uri_path
  • com.example.app, denetiminiz altındaki bir alanın ters DNS gösterimidir. Özel şemanın, geçerli olması için bir nokta içermesi gerekir.
  • com.googleusercontent.apps.123, istemci kimliğinin ters DNS gösterimidir.
  • redirect_uri_path, /oauth2redirect gibi isteğe bağlı bir yol bileşenidir. Yolun, normal HTTP URL'lerinden farklı olan tek bir eğik çizgiyle başlaması gerektiğini unutmayın.
Geri dönen IP adresi http://127.0.0.1:port veya http://[::1]:port

İlgili geri dönüş IP adresi için platformunuzu sorgulayın ve rastgele kullanılabilir bir bağlantı noktasında bir HTTP dinleyici başlatın. port değerini, uygulamanızın dinlediği gerçek bağlantı noktası numarasıyla değiştirin.

Mobil uygulamalarda geri döngü IP adresi yönlendirme seçeneği desteğinin KULLANIMDAN KALDIRILDI olduğunu unutmayın.

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 code olarak ayarlayın.

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:

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 sağlar.

code_challenge Önerilen

Yetkilendirme kod değişimi sırasında sunucu tarafı sorgulama olarak kullanılacak kodlanmış code_verifier öğesini belirtir. Daha fazla bilgi için yukarıdaki kod testi oluşturma bölümüne bakın.

code_challenge_method Önerilen

Yetkilendirme kodu değişimi sırasında kullanılacak bir code_verifier öğesini kodlamak için hangi yöntemin kullanıldığını belirtir. Bu parametre, yukarıda açıklanan code_challenge parametresiyle birlikte kullanılmalıdır. code_challenge içeren istekte mevcut değilse code_challenge_method değeri varsayılan olarak plain olur. Bu parametre için yalnızca S256 veya plain değerleri desteklenir.

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 redirect_uri öğesinin URL parçası tanımlayıcısında (#) name=value çifti olarak gönderdiğiniz değeri döndürür.

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. redirect_uri metriğiniz tahmin edilebildiğinden state değeri kullanmak, gelen bağlantının bir kimlik doğrulama isteği sonucu olduğuna dair güveninizi artırabilir. Rastgele bir dize oluşturur veya bir çerezin ya da istemcinin durumunu kaydeden başka bir değerin karmasını kodlarsanız yanıtı doğrulayarak ayrıca istek ve yanıtın aynı tarayıcıda kaynaklandığından emin olmak için siteler arası istek sahtekarlığı gibi saldırılara karşı koruma sağlayabilirsiniz. state jetonunun nasıl oluşturulacağı ve onaylanacağıyla ilgili bir örnek görmek için RFC Connect dokümanlarına göz atın.

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 sub tanımlayıcısı olarak ayarlayın.

Ö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.