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

0 0. 0 0 2. 2 2. 0. 0. 0. 0 2 0. 2 0. 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 belirli verileri bir uygulamayla paylaşmasına olanak tanır. Örneğin, bir uygulama, kullanıcılardan kendi Google Drive'larında dosya depolama izni almak için OAuth 2.0'ı kullanabilir.

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

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çıp 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ı yetkilendirmesini işler. 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 ya da yazıcılar gibi sınırlı giriş yeteneklerine sahip 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 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 tüm 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 bölümünde, ü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 arama özelliğini 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şturma

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 bilgileri oluşturacağınız açıklanmaktadır. Daha sonra uygulamalarınız bu 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 istemcinizi adlandırın 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 alanı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 imzalama sertifikası parmak izini girin.
    • Uygulamanızda Google Play'den uygulama imzalama kullanılı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 insanları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 Google API'leri Android dokümanlarındaki Authenticating Your Client (İstemcinizin Kimliklerini Yetkilendirme) sayfasına göz atı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 alanı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. Bu değer genellikle Xcode proje düzenleyicisinin Genel bölmesinde veya İ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ı)

    Uygulama, Apple App Store'da yayınlandıysa uygulamanızın App Store kimliğini girin. Store 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. Create'i (Oluştur) tıklayın.
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 alanında gösterilir.
  3. Uygulamanızın 12 karakterli Microsoft Store kimliğini girin. Bu değeri Microsoft İş Ortağı Merkezi'nde, 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'sı ihtiyacını ortadan kaldırır.

Android için Google ile Oturum Açma SDK'sına geçiş yapma

Android'de OAuth entegrasyonunuz için şu anda özel bir şema kullanıyorsanız önerilen Android SDK'sı için Google ile Oturum Açma'ya tamamen geçiş yapmak ü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 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 yer alan özel şema yönlendirme URI'sidir. Özel URI şema değerinin biçimi hakkında daha ayrıntılı 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 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 değerini yeniden kullanır 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 bir 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 işe yaramazsa 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

OAuth 2.0 yanıtını doğrudan uygulamanıza sunarak yönlendirme URI'sı 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 işlemini tamamlamak için Google Play Geliştirici Hesabınızı kullanabilirsiniz. Başarılı bir doğrulama işlemi için aşağıdaki şartların karşılanması gerekir:

  • Google Play Console'da, doğrulamayı 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'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 onaylamak için bir bildirim görüntülenir. Aksi takdirde, bir hata istemi görüntülenir.

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

  • Doğrulamakta olduğunuz 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 işlemini tamamlamak için Chrome Web Mağazası Geliştirici hesabınızı kullanmanız gerekir. 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ğrulamayı 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 onaylamak için bir bildirim görüntülenir. Aksi takdirde, bir hata istemi görüntülenir.

Başarısız bir 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. Yani uygulamanın bireysel yayıncısı veya 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 kısa süre önce 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ın yerel web sunucusunu dinlemesi gerekir. Bu, tüm platformlarda olmasa da birçok platformda mümkündür. Ancak platformunuz destekliyorsa yetkilendirme kodunu almak için önerilen mekanizma budur.

Uygulamanız yetkilendirme yanıtı aldığında en iyi kullanılabilirlik için kullanıcıya tarayıcıyı kapatıp uygulamanıza dönmesini söyleyen bir HTML sayfası görüntüleyerek yanıt vermelidir.

Önerilen kullanım macOS, Linux ve Windows masaüstü (ancak 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 isteğinde bulunmasına ve aynı zamanda kullanıcıların uygulamanıza verdikleri erişim miktarını kontrol etmesine olanak tanır. Bu nedenle, istenen kapsam 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şmesi için izin gerektirecek kapsamları belirlemenizi öneririz.

OAuth 2.0 API Kapsamları dokümanı, 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, kullanıcının adına API isteği gerçekleştirmek için kullanıcının iznini almak üzere uygulamanızın 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 izne sahip olması 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 Proof Key for Code Exchange (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 kodunun alınması amacıyla 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 olan yüksek entropili kriptografik rastgele dizedir.

Kod doğrulayıcı, değerin tahmin edilmesini zorlaştıracak kadar entropiye sahip olmalıdır.

Kod testi oluşturma

İki kod sorgulaması oluşturma 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ı ile aynı değerdir.
code_challenge = code_verifier

2. Adım: Google'ın OAuth 2.0 sunucusuna bir istek gönderin

Kullanıcı yetkisi 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ıdan izin alır. Uç noktaya yalnızca SSL üzerinden erişilebiliyor ve uç nokta HTTP (SSL olmayan) bağlantılarını 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 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 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, kontrolünüz altındaki bir alanın ters DNS gösterimidir. Özel şema, geçerli olması için bir nokta içermelidir.
  • 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.
Döngü 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ından 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öngü IP adresi yönlendirme seçeneği desteğinin KULLANIMDAN KALDIRILDIĞINI 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 isteğinde bulunmasına ve aynı zamanda kullanıcıların uygulamanıza verdikleri erişim miktarını kontrol etmesine olanak tanır. 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 kod değişimi sırasında sunucu tarafı sorgulama olarak kullanılacak, kodlanmış bir 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 kod 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 olur. Bu parametre yalnızca S256 veya plain 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. 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 tam değeri döndürür.

Bu parametreyi, kullanıcıyı uygulamanızdaki doğru kaynağa yönlendirmek, tek seferlik sayılar göndermek ve siteler arası istek sahtekarlığını azaltmak gibi çeşitli amaçlar için kullanabilirsiniz. redirect_uri tahmin edilebildiği için state değeri kullanmak, gelen bağlantının kimlik doğrulama isteği sonucunda gerçekleştiğine dair güveninizi artırabilir. Rastgele bir dize oluşturur veya istemcinin durumunu yakalayan bir çerezin ya da başka bir değerin karmasını kodlarsanız, istek ve yanıtın aynı tarayıcıdan kaynaklandığından emin olmak için yanıtı doğrulayabilirsiniz. Bu sayede siteler arası istek sahtekarlığı gibi saldırılara karşı koruma sağlayabilirsiniz. state jetonunun nasıl oluşturulacağı ve onaylanacağıyla ilgili bir örnek için OpenID Connect dokümanlarına bakın.

login_hint İsteğe bağlı

Uygulamanız hangi kullanıcının kimlik doğrulamasına çalıştığını biliyorsa bu parametreyi, Google Kimlik Doğrulama Sunucusu'na ipucu sağlamak için kullanabilir. Sunucu, oturum açma formundaki e-posta alanını önceden doldurarak veya uygun çoklu oturum açma oturumunu seçerek giriş akışını basitleştirmek için bu ipucunu kullanı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 okunaklılık için satır sonu ve boşluk 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, uygulamanıza istenen erişimi verip vermemeye kullanıcı karar verir. Google bu aşamada, kullanıcının yetkilendirme kimlik bilgileriyle uygulamanızın ve erişim izni istediği Google API hizmetlerinin adını ve verilecek erişim kapsamlarının bir özetini gösteren bir izin penceresi görüntüler. Böylece kullanıcı, uygulamanızın istediği bir veya daha fazla kapsama erişim izni verebilir ya da isteği reddedebilir.

Google'ın OAuth 2.0 sunucusundan herhangi bir erişim izni 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 veya 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ının ve dahili uygulamaların erişebileceğini kontrol etme başlıklı Google Workspace Yöneticisi yardım makalesine bakın.

disallowed_useragent

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

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 OpenID Foundation'ın Android için AppAuth hizmeti gibi Android kitaplıklarını kullanmalıdır.

Bir Android uygulaması, yerleşik bir kullanıcı aracısında genel web bağlantısını 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, genel bağlantıların hem Android Uygulama Bağlantıları işleyicilerini hem de varsayılan tarayıcı uygulamasını içeren işletim sisteminin varsayılan bağlantı işleyicide 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 veya OpenID Foundation'ı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 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 hem Evrensel Bağlantılar işleyicilerini hem de varsayılan tarayıcı uygulamasını içeren işletim sisteminin varsayılan bağlantı işleyicide açılmasına izin vermelidir. SFSafariViewController kitaplığı da desteklenen bir seçenektir.

org_internal

İstekteki OAuth istemci kimliği, belirli bir Google Cloud Organization'daki 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ı ayarlama başlıklı yardım makalesinin Kullanıcı türü bölümüne bakın.

invalid_grant

Kod doğrulayıcı ve giriş sorgulaması kullanıyorsanız code_callenge parametresi geçersiz veya eksiktir. code_challenge parametresinin doğru şekilde ayarlandığından emin olun.

Erişim jetonunu yenilerken jetonun süresi dolmuş veya jetonun geçersiz kılınmış olması mümkündür. 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 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'sıyla 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 edebilir. Entegrasyonunuzu güncellemek için taşıma rehberini inceleyin.

invalid_request

Gönderdiğiniz istekte bir sorun var. 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 entegrasyonunuzda önerilen bir entegrasyon yöntemi kullanıldığını doğrulayın
  • Yönlendirme URI'si için bir özel şema kullanılır : Özel URI şeması Chrome uygulamalarında desteklenmiyor hata mesajını veya Android istemciniz için özel URI şeması etkin değil hata mesajını görürseniz 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

4. Adım: OAuth 2.0 sunucu yanıtını ele alın

Uygulamanızın yetkilendirme yanıtını alma şekli, kullandığı yönlendirme URI'sı ş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 gösterir.

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 kodu değişimi

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 pagekaynağından alınan API Console 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 API Console Credentials page içinde projeniz için 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. Bu 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 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ı 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, Google API'lerine yönelik çağrılarınızı ayarlamak için bir istemci kitaplığı kullanabilirsiniz (örneğin, Drive Files API'yi çağırırken).

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

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 parametresi kullanılarak 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 üst bilgisi seçeneğinin kullanıldığı bir örneği burada bulabilirsiniz (tercih edilen):

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

Alternatif olarak, sorgu dizesi parametresi seçeneği:

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

Erişim jetonunu yenileme

Erişim jetonlarının süresi periyodik olarak dolar 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, 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üzerinden 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 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"
}

Yayınlanacak yenileme jetonu sayısına ilişkin sınırlar olduğunu unutmayın. Bu sınırlar, tüm istemcilerde istemci/kullanıcı kombinasyonu başına bir sınır ve tüm istemciler için kullanıcı başına başka 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 bölümüne bakın.

Ayrıca bir uygulama, kendisine verilen erişimi programlı bir şekilde iptal edebilir. Programlı iptal; kullanıcının abonelikten çıktığı, uygulamayı kaldırdığı veya bir uygulamanın gerektirdiği API kaynaklarının önemli ölçüde değiştiği durumlarda önemlidir. Diğer 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 programatik olarak iptal etmek için https://oauth2.googleapis.com/revoke isteğinde bulunur ve jetonu parametre olarak içerir:

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

Ek Okumalar

IETF'nin Mevcut En İyi Uygulaması Yerel Uygulamalar için OAuth 2.0, burada belgelenen en iyi uygulamaların çoğunu temel alır.