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

Bu dokümanda, telefon, tablet ve bilgisayar gibi cihazlara yüklenen uygulamaların, Google API'lerine 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 kullanıcıların belirli verileri bir uygulamayla paylaşmasına olanak tanır. Örneğin, bir uygulama, kullanıcılardan Google Drive'larında dosya depolama izni almak için OAuth 2.0'ı kullanabilir.

Yüklü uygulamalar ayrı ayrı cihazlara dağıtılır ve bu uygulamaların sır tutamayacağı varsayılır. Google API'lerine, kullanıcı uygulamada varken veya uygulama arka planda çalışırken erişebilir.

Bu yetkilendirme akışı, web sunucusu uygulamaları için kullanılana benzer. Aralarındaki temel fark, yüklü uygulamaların Google'ın yetkilendirme sunucusundan gelen yanıtları işlemek için sistem tarayıcısını açması ve yerel bir 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ı yetkilendirme işlemlerini yönetir. Bu kitaplıkların uygulanması, burada açıklanan alt düzey protokolden daha basit olabilir.

Sistem tarayıcısını desteklemeyen veya TV'ler, oyun konsolları, kameralar veya yazıcılar gibi sınırlı giriş özelliklerine sahip cihazlarda çalışan uygulamalar için TV'ler ve Cihazlar için OAuth 2.0 veya TV'lerde ve Sınırlı Giriş Cihazlarında oturum açma bölümlerine 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 Consoleiçinde etkinleştirmesi gerekir.

Projeniz için bir API'yi etkinleştirmek üzere:

  1. Open the API Library Google API Consoleiçinde gösteriliyor.
  2. If prompted, select a project, or create a new one.
  3. API Library sütununda, ürün ailesine ve popülerliğe göre gruplandırılmış tüm API'ler listelenir. Etkinleştirmek istediğiniz API listede görünmüyorsa bulmak için aramayı kullanın veya ait olduğu ürün ailesinde Tümünü Görüntüle'yi tıklayın.
  4. Etkinleştirmek istediğiniz API'yi seçip Etkinleştir düğmesini tıklayın.
  5. If prompted, enable billing.
  6. If prompted, read and accept the API's Terms of Service.

Yetkilendirme kimlik bilgileri oluştur

Google API'lerine erişmek için OAuth 2.0 kullanan tüm uygulamalar, uygulamayı Google'ın OAuth 2.0 sunucusuna tanımlayan yetkilendirme kimlik bilgilerine sahip olmalıdır. Aşağıdaki adımlarda projeniz için nasıl kimlik bilgisi oluşturacağınız açıklanmaktadır. Daha sonra uygulamalarınız söz konusu proje için 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, Google'ın yetkilendirme sunucusunun desteklediği istemci türleri ve 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 öğesinde 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 imzalama sertifikası parmak izini girin.
    • Uygulamanız Google Play'den uygulama imzalama özelliğini 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'yla 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'lerinde İstemcinizin Kimlik Doğrulaması başlıklı belgeye bakın.
  5. (İsteğe bağlı) Android uygulamanızın sahipliğini doğrulayın.
  6. Create'i (Oluştur) 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 öğesinde 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, Genel bölmesinde veya Xcode proje düzenleyicisinin İmzalama ve Özellikler bölmesinde gösterilir. Paket kimliği ayrıca 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ı)

    Uygulama Apple App Store'da yayınlandıysa uygulamanızın App Store kimliğini girin. Mağaza Kimliği, her Apple App Store URL'sinde bulunan 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 parçası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 Developer Hesabı belgelerinde Ekip Kimliğinizi bulma bölümüne bakın.

  6. Create'i (Oluştur) tıklayın.
UWP (UWP)
  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 öğesinde gösterilir.
  3. Uygulamanızın 12 karakterli Microsoft Store kimliğini girin. Bu değeri Microsoft İş Ortağı Merkezi'ndeki Uygulama yönetimi bölümündeki Uygulama kimliği sayfasında bulabilirsiniz.
  4. Create'i (Oluştur) 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 tanımlı bir şema kullanan bir derin bağlantı biçimidir.

Android'de özel URI şemaları kullanmaya alternatif

Android için Google ile Oturum Açma SDK'sını kullanın. Bu SDK, OAuth 2.0 yanıtını doğrudan uygulamanıza sunarak yönlendirme URI'si ihtiyacını ortadan kaldırır.

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 önerilen Android SDK'sı için Google ile Oturum Açma özelliğini kullanmaya tamamen geçiş yapmak amacıyla aşağıdaki işlemleri tamamlamanız gerekir:

  1. Google ile Oturum Açma SDK'sını kullanmak için kodunuzu 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 istek gönderdiğiniz yeri belirlemek için kodunuzu inceleyin. Özel bir ş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 özel şema yönlendirme URI'sidir. Özel URI şema değerinin biçimi hakkında daha fazla bilgi için redirect_uri parametre tanımına bakın.
    2. Google ile Oturum Açma SDK'sını yapılandırmak için ihtiyacınız olan 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 öğesini yeniden kullanacağınız gibi, Arka uç sunucunuzun OAuth 2.0 istemci kimliğini alma adımını atlayabilirsiniz.
    4. Sunucu Tarafı API erişimini etkinleştirme talimatlarını uygulayın. Buna aşağıdaki adımlar dahildir:
      1. İzin istediğiniz kapsamlar için yetkilendirme kodu almak üzere getServerAuthCode yöntemini kullanın.
      2. Yetkilendirme kodunu uygulamanızın arka ucuna göndererek onu erişim ve yenileme jetonuyla değiştirin.
      3. Alınan erişim jetonunu, kullanıcı adına Google API'lerine çağrı yapmak için kullanın.
  2. Google API Konsolu'nda özel şema desteğini devre dışı bırakın:
    1. OAuth 2.0 kimlik bilgileri listenize gidip 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 gidip 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 sunarak 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

Google Play Geliştirici Hesabınız varsa ve uygulamanız Google Play Console'da kayıtlıysa doğrulama sürecini tamamlamak için Google Play Geliştirici Hesabınızı kullanabilirsiniz. Başarılı bir doğrulama işlemi için aşağıdaki koşulların karşılanması gerekir:

  • Google Play Console'da, doğrulamasını tamamladığınız Android OAuth istemcisiyle aynı paket adına ve SHA-1 imzalama sertifikası dijital parmak izine sahip kayıtlı bir uygulamanızın olması gerekir.
  • Google Play Console'da uygulama için Yönetici izninizin olması gerekir. Google Play Console'daki 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 belirten bir bildirim görüntülenir. Aksi takdirde, bir hata istemi gösterilir.

Başarısız doğrulama işlemini düzeltmek 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 izniniz olduğundan emin olun.
Chrome

Doğrulama işlemini tamamlamak için Chrome Web Mağazası Geliştirici hesabınızı kullanırsınız. Başarılı bir doğrulama işlemi için aşağıdaki şartların karşılanması gerekir:

  • Chrome Web Mağazası Geliştirici Kontrol Paneli'nde, doğrulamasını tamamladığınız Chrome Uzantısı OAuth istemcisiyle aynı öğe kimliğine sahip kayıtlı bir öğeniz olmalıdır.
  • Chrome Web Mağazası öğesi için yayıncı olmanız gerekir. Chrome Web Mağazası Geliştirici Kontrol Paneli'nde erişim yönetimi hakkında daha fazla bilgi edinin.

Chrome Uzantısı 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.

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 belirten bir bildirim görüntülenir. Aksi takdirde, bir hata istemi gösterilir.

Başarısız doğrulama işlemini düzeltmek için lütfen aşağıdakileri deneyin:

  • Chrome Web Mağazası Geliştirici Kontrol Paneli'nde, doğrulamayı tamamladığınız Chrome Uzantısı OAuth istemcisiyle aynı öğe kimliğine sahip kayıtlı bir öğe olduğundan emin olun.
  • Uygulama için yayıncı olduğunuzdan emin olun. Örneğin, uygulamanın bireysel yayıncısı veya uygulamanın grup yayıncısının bir üyesi olmanız gerekir. Chrome Web Mağazası Geliştirici Kontrol Paneli'nde erişim yönetimi hakkında daha fazla bilgi edinin.
  • Grup yayıncı listenizi yakın zamanda güncellediyseniz grup yayıncı üyeliği listesinin Chrome Web Mağazası Geliştirici Kontrol Paneli'nde senkronize edildiğini doğrulayın. Yayıncı üyelik listenizi senkronize etme hakkında daha fazla bilgi edinin.

Loopback IP adresi (macOS, Linux, Windows masaüstü)

Yetkilendirme kodunu bu URL'yi kullanarak almak için uygulamanız yerel web sunucusunda dinleme yapıyor olmalıdır. Bu, tüm platformlarda olmasa da birçok platformda mümkündür. 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 dönmesini bildiren bir HTML sayfası göstererek yanıt vermelidir.

Önerilen kullanım macOS, Linux ve Windows masaüstü (Evrensel Windows Platformu 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ı belirleme

Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim istemesine olanak tanırken kullanıcıların uygulamanıza verdikleri erişim miktarını da kontrol edebilmesini sağlar. Dolayısıyla, istenen kapsamların sayısı ile kullanıcıdan izin alma olasılığı arasında ters bir ilişki olabilir.

OAuth 2.0 yetkilendirmesini uygulamaya başlamadan önce, uygulamanızın erişim için izin alması gereken kapsamları belirlemenizi öneririz.

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ı edinme

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ütebilmesi için önce bu izni alması gerekir.

1. Adım: Kod doğrulayıcı ve giriş sorgulaması oluşturun

Google, yüklü uygulama akışını daha güvenli hale getirmek için Kod Değişimi İçin Kanıt Anahtarı (PKCE) protokolünü destekler. Her yetkilendirme isteği için benzersiz bir kod doğrulayıcı oluşturulur ve "code_challenge" adı verilen dönüştürülmüş değer, yetkilendirme kodunu almak üzere yetkilendirme sunucusuna gönderilir.

Kod doğrulayıcıyı oluşturma

code_verifier, ayrılmamış [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~" karakterlerinin kullanıldığı, en az 43 karakter ve maksimum 128 karakter uzunluğunda olan yüksek entropili kriptografik rastgele bir dizedir.

Kod doğrulayıcı, değerin tahmin edilmesini imkansız hale getirecek kadar entropiye sahip olmalıdır.

Kod sorgulamasını oluşturma

Kod sorgulamasını oluşturmanın iki yöntemi desteklenir.

Kod Zorlama Oluşturma Yöntemleri
S256 (önerilir) Kod sorgulaması, kod doğrulayıcının Base64URL (dolgu olmadan) kodlanmış SHA256 karmasıdır.
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
düz Kod sorgulaması, yukarıda oluşturulan kod doğrulayıcının değeriyle aynı.
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 adresindeki yetkilendirme sunucusuna bir istek gönderin. Bu uç nokta, aktif 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ı reddedilir.

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 birkaç yönlendirme seçeneği vardır ve yetkilendirme kimlik bilgilerinizi belirli bir yönlendirme yöntemini göz önünde bulundurarak ayarlamanız gerekir.

Değer, istemcinizin API Console Credentials pageiçinde yapılandırdığınız OAuth 2.0 istemcisi için yetkilendirilmiş 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 parametresi 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, kontrolünüz 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.
Loopback IP adresi http://127.0.0.1:port veya http://[::1]:port

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

Mobil uygulamalarda geri dönüş 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 yetkilendirme kodu döndürüp döndürmediğ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 listesidir. 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 istemesine olanak tanırken kullanıcıların uygulamanıza verdikleri erişim miktarını da kontrol edebilmesini sağlar. Bu nedenle, istenen kapsam sayısı ile kullanıcıdan izin alma olasılığı arasında ters bir ilişki vardır.

code_challenge Önerilen

Yetkilendirme kodu değişimi sırasında sunucu tarafı sorgulama olarak kullanılacak kodlanmış code_verifier belirtir. Daha fazla bilgi için yukarıdaki kod sorgulaması 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 kodunu kodlamak için hangi yöntemin kullanıldığını belirtir. Bu parametre, yukarıda açıklanan code_challenge parametresiyle kullanılmalıdır. code_challenge_method değeri, code_challenge içeren istekte mevcut değilse varsayılan olarak plain değerine ayarlanır. Bu parametre yalnızca S256 veya plain değerleri için desteklenir.

state Önerilen

Uygulamanızın, yetkilendirme isteğiniz ve yetkilendirme sunucusunun yanıtı arasındaki durumu korumak için kullandığı tüm dize değerlerini belirtir. Kullanıcı, uygulamanızın erişim isteğine izin verdikten veya reddettikten sonra sunucu, redirect_uri öğesinin URL parçası tanımlayıcısında (#) name=value çifti olarak gönderdiğiniz tam değeri döndürür.

Bu parametreyi; kullanıcıyı uygulamanızda doğru kaynağa yönlendirmek, tek seferlik rastgele bir sayı göndermek ve siteler arası istek sahtekarlığını azaltmak gibi çeşitli amaçlar için kullanabilirsiniz. redirect_uri değeriniz tahmin edilebileceğinden, state değeri kullanmak, gelen bağlantının kimlik doğrulama isteğinden kaynaklandığına dair güveninizi artırabilir. Rastgele bir dize oluşturursanız veya bir çerezin ya da istemcinin durumunu yakalayan başka bir değerin karmasını kodlarsanız isteğin ve yanıtın aynı tarayıcıdan kaynaklandığından emin olmak için yanıtı doğrulayarak siteler arası istek sahtekarlığı gibi saldırılara karşı koruma sağlayabilirsiniz. state jetonunun nasıl oluşturulacağını ve onaylanacağını öğrenmek için OpenID 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ı bilirse bu parametreyi, Google Kimlik Doğrulama Sunucusu'na ipucu sağlamak için kullanabilir. Sunucu, bu ipucunu oturum açma formundaki e-posta alanını önceden doldurarak veya uygun çoklu giriş oturumunu seçerek giriş akışını basitleştirmek için kullanılır.

Parametre değerini, kullanıcının Google kimliğiyle eşdeğer olan bir e-posta adresi veya 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östermektedir.

redirect_uri parametresinin değeri dışında URL'ler aynıdır. URL'ler gerekli response_type ve client_id parametrelerinin yanı sıra isteğe bağlı state parametresini de içerir. Her URL, okunabilirlik için satır sonları ve boşluklar içerir.

Özel URI şeması

https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 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

Loopback IP adresi

https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 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şim iznini verip vermeyeceğine karar verir. Bu aşamada Google, uygulamanızın adını ve kullanıcının yetkilendirme kimlik bilgileriyle erişim izni istediği Google API hizmetlerini ve verilecek erişim kapsamlarının özetini gösteren bir izin penceresi gösterir. Böylece kullanıcı, uygulamanızın istediği bir veya daha fazla kapsama erişim izni verebilir veya isteği reddedebilir.

Google'ın OAuth 2.0 sunucusundan herhangi bir erişim verilip verilmediğini belirten yanıtı beklediği için uygulamanızın bu aşamada herhangi bir işlem yapmasına gerek yoktur. Bu yanıt, aşağıdaki adımda açıklanmıştı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ı yetkilendiremiyor. OAuth istemci kimliğinize açıkça erişim izni verilene kadar 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 Google Workspace verilerine hangi üçüncü taraf uygulamalar ve dahili uygulamaların erişebileceğini yönetme başlıklı Google Workspace Yöneticisi yardım makalesine göz atın.

disallowed_useragent

Yetkilendirme uç noktası, Google'ın OAuth 2.0 Politikaları ile izin verilmeyen yerleştirilmiş bir kullanıcı aracısının içinde gösterilir.

Android

Android geliştiricileri, android.webkit.WebView'te yetkilendirme isteklerini açarken bu hata mesajıyla karşılaşabilir. Geliştiriciler bunun yerine Android için Google ile Oturum Açma veya OpenID Vakfı'nın Android için AppAuth hizmeti gibi Android kitaplıklarını kullanmalıdır.

Bir Android uygulaması, yerleştirilmiş bir kullanıcı aracısında genel bir web bağlantısı açtığında ve 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, işletim sisteminin varsayılan bağlantı işleyicisinde genel bağlantıların açılmasına izin vermelidir. Bu işleyici hem Android App Links hem de varsayılan tarayıcı uygulamasını içerir. Android Özel Sekmeler kitaplığı da desteklenen bir seçenektir.

iOS

iOS ve macOS geliştiricileri, WKWebView'te yetkilendirme isteklerini açarken bu hatayla karşılaşabilir. Geliştiriciler bunun yerine iOS için Google ile Oturum Açma veya OpenID Vakfı'nın iOS için AppAuth hizmeti gibi iOS kitaplıklarını kullanmalıdır.

Bir iOS veya macOS uygulaması, yerleştirilmiş bir 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 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 işleyici, hem Evrensel Bağlantılar işleyicilerini 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ıdır. Bu yapılandırma seçeneği hakkında daha fazla bilgi için OAuth izin ekranınızı ayarlamayla ilgili 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 ayarlandığından emin olun.

Bir erişim jetonunu yenilerken jetonun süresi dolmuş veya jetonu geçersiz hale gelmiş olabilir. Yeni jetonlar almak için kullanıcının kimliğini tekrar doğrulayın ve kullanıcıdan izin isteyin. Bu hatayı görmeye devam ediyorsanız uygulamanızın doğru yapılandırıldığından ve isteğinizde doğru jetonları 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 rehberini inceleyin.

invalid_request

Gönderdiğiniz istekle ilgili bir sorun var. Bunun birkaç nedeni olabilir:

  • İstek düzgün şekilde biçimlendirilmemiş
  • İstekte gerekli parametreler eksikti
  • İstek, Google'ın desteklemediği bir yetkilendirme yöntemi kullanıyor. OAuth entegrasyonunuzun önerilen entegrasyon yöntemini kullandığını doğrulayın
  • Yönlendirme URI'si için özel bir şema kullanılır : Özel URI şeması Chrome uygulamalarında desteklenmiyor veya Android istemciniz için özel URI şeması etkin değil hata mesajını görüyorsanız Chrome uygulamalarında desteklenmeyen ve Android'de varsayılan olarak devre dışı olan özel bir URI şeması kullanıyorsunuz demektir. Özel URI şeması alternatifleri hakkında daha fazla bilgi

4. Adım: OAuth 2.0 sunucu yanıtını işleyin

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, bir yetkilendirme kodu (code) veya bir hata (error) içerir. Örneğin, error=access_denied, kullanıcının isteği reddettiğini belirtir.

Kullanıcı, uygulamanıza erişim izni verirse sonraki adımda açıklandığı gibi yetkilendirme kodunu bir erişim jetonu ve yenileme jetonuyla değiştirebilirsiniz.

5. Adım: Yenileme ve erişim jetonları için yetkilendirme kodunu değiştirin

Erişim jetonuyla yetkilendirme kodunu değiştirmek için https://oauth2.googleapis.com/token uç noktasını çağırın ve aşağıdaki parametreleri ayarlayın:

Alanlar
client_id Credentials pageüzerinden API Console alınan istemci kimliği.
client_secret Credentials pageöğesinden alınan API Console istemci gizli anahtarı.
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 projeniz için API Console Credentials page içinde 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 kalan ömrü (saniye cinsinden).
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 bilgileri içeren bir JSON Web Token'dır (JWT).
refresh_token Yeni bir erişim jetonu almak için kullanabileceğiniz bir jeton. Yenileme jetonları, kullanıcı erişimi iptal edene kadar geçerlidir. Yüklü uygulamalar için yenileme jetonlarının her zaman döndürüleceğini 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ı dizelerden oluşan bir liste 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'te örnek bir yanıt gösterilmektedir:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/drive.metadata.readonly",
  "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

Google API'lerini çağırma

Uygulamanız bir erişim jetonu aldıktan sonra, API'nin gerektirdiği erişim kapsamları verilmişse bu jetonu belirli bir kullanıcı hesabı adına bir Google API'ye çağrı yapmak için kullanabilirsiniz. Bunu yapmak için access_token sorgu parametresi veya Authorization HTTP üst bilgisi Bearer değeri ekleyerek API'ye yapılan bir isteğe erişim jetonunu ekleyin. Sorgu dizeleri sunucu günlüklerinde görünür olduğundan mümkün olduğunda HTTP üst bilgisi tercih edilir. Çoğu durumda (örneğin, Drive Files API'yi çağırırken) Google API'lerine yönelik çağrılarınızı ayarlamak için bir istemci kitaplığı kullanabilirsiniz.

OAuth 2.0 Playground'da tüm Google API'lerini deneyebilir ve kapsamlarını görüntüleyebilirsiniz.

HTTP GET örnekleri

Authorization: Bearer HTTP üst bilgisini kullanarak drive.files uç noktasına (Drive Files API) yapılan bir çağrı aşağıdaki gibi görünebilir. Kendi erişim jetonunuzu belirtmeniz gerektiğini unutmayın:

GET /drive/v2/files HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

Burada, access_token sorgu dizesi parametresini kullanan kimliği doğrulanmış kullanıcı için aynı API'ye yapılan bir çağrı gösterilmektedir:

GET https://www.googleapis.com/drive/v2/files?access_token=access_token

curl örnekleri

Bu komutları curl komut satırı uygulamasıyla test edebilirsiniz. HTTP başlığı seçeneğinin kullanıldığı bir örneği aşağıda bulabilirsiniz (tercih edilen):

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files

Alternatif olarak sorgu dizesi parametresi seçeneğinden de yararlanabilirsiniz:

curl https://www.googleapis.com/drive/v2/files?access_token=access_token

Erişim jetonunu yenileme

Erişim jetonlarının süresi belirli aralıklarla dolar ve ilgili API isteği için geçersiz kimlik bilgileri haline gelir. Bir erişim jetonunu, jetonla ilişkili kapsamlara çevrimdışı erişim isteğinde bulunduysanız kullanıcıdan izin istemeden (kullanıcının bulunmadığı durumlar 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 Consolecihazından 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 değişiminden 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ıyla ilgili sınırlar olduğunu unutmayın. Bu sınırlar istemci/kullanıcı kombinasyonu başına bir sınır ve tüm istemcilerde kullanıcı başına bir sınırdır. Yenileme jetonlarını uzun süreli depolama alanına kaydetmeniz ve geçerli oldukları 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 kullanıcı, bir uygulamaya verilen erişimi iptal etmek isteyebilir. Kullanıcı, Hesap Ayarları sayfasını ziyaret ederek erişimi iptal edebilir. Daha fazla bilgi için Hesabınıza erişimi olan üçüncü taraf site ve uygulamaların Site veya uygulama erişimini kaldırma başlıklı destek belgesini inceleyin.

Ayrıca bir uygulama, kendisine verilen erişimi programlı olarak iptal edebilir. Kullanıcının abonelikten çıktığı, uygulamayı kaldırdığı veya uygulamanın gerektirdiği API kaynaklarının önemli ölçüde değiştiği durumlarda programatik iptal önemlidir. Başka bir deyişle, kaldırma süreci kapsamında, uygulamaya daha önce verilmiş olan izinlerin kaldırıldığından emin olmak için bir API isteği gönderilebilir.

Uygulamanız, bir jetonu programlı olarak iptal etmek için https://oauth2.googleapis.com/revoke adresine 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, 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ında hata koduyla birlikte 400 HTTP durum kodu döndürülür.

Ek Okumalar

IETF'nin Mevcut En İyi Uygulaması olan Yerel Uygulamalar için OAuth 2.0, burada belirtilen en iyi uygulamaların birçoğunu oluşturmaktadır.