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

Genel bakış Google'ın desteklediği OAuth 2.0 akışlarını özetler. Böylece uygulamanız için doğru akışı seçtiğinizden emin olabilirsiniz.

Bu dokümanda telefonlar, tabletler ve bilgisayarlar 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 sayesinde kullanıcılar bir uygulamayla kullanıcı verilerini, şifreleri ve diğer bilgileri gizli tutarken belirli verileri paylaşabilir. Örneğin bir uygulama, kullanıcılardan Google Drive'larında dosya depolama izni almak için OAuth 2.0'ı kullanabilir.

Yüklü uygulamalar tek tek cihazlara dağıtılır ve bu uygulamaların gizli anahtarları saklayamayacağı varsayılır. Kullanıcılar uygulamadayken veya uygulama arka planda çalışırken Google API'lerine erişebilir.

Bu yetkilendirme akışı, web sunucusu uygulamaları için kullanılan akışa benzerdir. Aradaki temel fark, yüklü uygulamaların sistem tarayıcısını açması ve Google'ın yetkilendirme sunucusundan gelen yanıtları işleyebilmek için 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ı yetkilendirmesi işlemlerini gerçekleştirir ve bunların uygulanması, burada açıklanan alt düzey protokolden daha basit olabilir.

Sistem tarayıcısını desteklemeyen veya TV, oyun konsolu, kamera veya yazıcı gibi sınırlı giriş işlevlerine 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ümüne bakın.

Kitaplıklar ve örnekler

Bu dokümanda açıklanan OAuth 2.0 akışını uygulamanıza yardımcı olmak 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, API Consoleiçinde bu API'leri etkinleştirmesi gerekir.

Projenizde API'yi etkinleştirmek için:

  1. Open the API Library içinde Google API Console.
  2. If prompted, select a project, or create a new one.
  3. API Library mevcut tüm API'leri ürün ailesine ve popülerliğe göre gruplandırılmış halde listeler. Etkinleştirmek istediğiniz API listede görünmüyorsa API'yi bulmak için arama özelliğini kullanın veya ait olduğu ürün ailesinde Tümünü Göster'i 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şturun

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 kimlik bilgilerinin nasıl oluşturulacağı açıklanmaktadır. Böylece uygulamalarınız bu proje için etkinleştirdiğiniz API'lere erişmek üzere 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.

Özel URI şeması (Android, iOS, UWP)

Android, iOS ve Universal Windows Platform (UWP) uygulamaları için özel URI şeması önerilir.

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 üzerinde 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ı dijital parmak izini girin.
    • Uygulamanız Google Play'den uygulama imzalamayı 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 tarafından okunabilir bir biçimde yazdırmak için Java'ya dahil olan 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 API'leri ile ilgili belgede Müşteri Kimlik Doğrulaması bölümüne bakın.
  5. 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 üzerinde 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 değerinin değeridir. Değer genellikle Xcode proje düzenleyicisinin Genel bölmesinde veya İmzalama ve Özellikler bölmesinde gösterilir. Paket kimliği, Apple App Store Connect sitesindeki 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'sine eklenen sayısal bir dizedir.

    1. iOS veya iPad 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 bölümü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ı dokümanlarındaki Team ID'nizi inceleyin.

  6. Oluştur'u tıklayın.
dönemden döneme
  1. Universal Windows Platform uygulama türünü seçin.
  2. OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page üzerinde gösterilir.
  3. Uygulamanızın 12 karakterli Microsoft Store kimliğini girin. Bu değeri Uygulama yönetimi bölümündeki Uygulama kimliği sayfasının Microsoft İş Ortağı Merkezi'nde bulabilirsiniz.
  4. Oluştur'u tıklayın.

UWP uygulamalarında, özel URI şeması 39 karakterden uzun olamaz.

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

Bu URL'yi kullanarak yetkilendirme kodunu almak için uygulamanızın yerel web sunucusunda dinlemesi gerekir. Bu mümkün olmasa da birçok platformda mümkün. Ancak platformunuz destekliyorsa yetkilendirme kodunu almak için önerilen mekanizma budur.

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

Önerilen kullanım macOS, Linux ve Windows masaüstü (Universal Windows Platform hariç) 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ı kontrol etmelerine olanak tanır. Bu nedenle, istenen kapsam sayısı ile kullanıcı rızası alma olasılığı arasında ters bir ilişki olabilir.

OAuth 2.0 yetkilendirmesini uygulamaya başlamadan önce, uygulamanızın erişmesi gereken izinlerin kapsamını 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ını edinme

Aşağıdaki adımlarda, uygulamanızın kullanıcı adına API isteğinde bulunmak için kullanıcının iznini almak amacıyla uygulamanızın Google'ın OAuth 2.0 sunucusuyla nasıl etkileşime geçtiği gösterilmektedir. Uygulamanızın, kullanıcı yetkilendirme gerektiren bir Google API isteği yürütebilmesi için önce bu izne sahip olması gerekir.

1. Adım: Kod doğrulayıcı ve sorgu oluşturma

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

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

code_verifier, ayrılmamış [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~" karakterlerini kullanan ve en az 43 karakter uzunluğunda, maksimum 128 karakter uzunluğunda yüksek entropi şifreli bir rastgele dizedir.

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

Kod sorgulamasını oluşturma

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

Code Challenge Oluşturma Yöntemleri
S256 (önerilir) Kodlayıcının kodu, kod doğrulayıcının Base64URL (dolgusuz) kodlu 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 istek gönderin

Kullanıcı yetkilendirmesi almak için https://accounts.google.com/o/oauth2/v2/auth adresinden Google'ın yetkilendirme sunucusuna bir istek gönderin. Bu uç nokta etkin oturum aramasını yönetir, kullanıcının kimliğini doğrular ve kullanıcı rızası 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 pagebölümünde bulabilirsiniz.

redirect_uri Zorunlu

Google yetkilendirme sunucusunun uygulamanıza nasıl yanıt gönderdiğini belirler. Yüklü uygulamaların kullanabileceği birkaç yönlendirme seçeneği vardır ve yetkilendirme kimlik bilgilerinizi belirli bir yönlendirme yöntemini göz önünde bulundurarak ayarlamış olmanız gerekir.

Değer, istemcinizin API Console Credentials pageiçinde yapılandırdığınız OAuth 2.0 istemcisinin 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, kontrolünüz altındaki bir alanın ters DNS gösterimidir. Özel şema, geçerli olacağı bir dönem 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.
Geri Dönüş IP adresi http://127.0.0.1:port veya http://[::1]:port

Platformunuzda ilgili geri dönüş IP adresi için sorgu oluşturun ve rastgele kullanılabilir bir bağlantı noktasında HTTP işleyicisi başlatın. port yerine uygulamanızın kullandığı gerçek bağlantı numarasını girin.

Mobil uygulamalarda geri dönüş IP adresi yönlendirme seçeneğinin desteklenmesinin 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ı belirtir.

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ı kontrol etmelerine olanak tanır. Bu yüzden, istenen kapsam sayısı ile kullanıcı rızası alma olasılığı arasında ters bir ilişki vardır.

code_challenge Önerilen

Yetkilendirme kodu değişimi sırasında sunucu tarafı sorgulaması 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 kodu değişimi sırasında kullanılacak code_verifier öğesini 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 içeren istekte yoksa, code_challenge_method değeri varsayılan olarak plain olur. Bu parametre için desteklenen tek değerler S256 veya plain'dir.

state Önerilen

Uygulamanızın, yetkilendirme isteğiniz ile yetkilendirme sunucusunun yanıtı arasında durumu korumak için kullandığı dize değerini belirtir. Kullanıcı, uygulamanızın erişim isteğine izin verdikten veya reddettikten sonra, redirect_uri, URL parça 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, nonce'lar göndermek ve siteler arası istek sahtekarlığını azaltmak gibi çeşitli amaçlarla kullanabilirsiniz. redirect_uri tahmini yapabildiğiniz için bir state değeri kullanmak, gelen bağlantının bir kimlik doğrulama isteği sonucunda gerçekleştiğine dair güvencenizi artırabilir. Rastgele bir dize oluşturur veya istemcinin durumunu yakalayan bir çerezin veya başka bir değerin karmasını kodlarsanız yanıtın doğrulanabilmesi için isteğin ve yanıtın aynı tarayıcıdan kaynaklandığından emin olabilirsiniz. Böylece, siteler arası istek sahtekarlığı gibi saldırılara karşı koruma sağlayabilirsiniz. state jetonunun nasıl oluşturulup onaylanacağına dair 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ı yapmaya çalıştığını biliyorsa Google Kimlik Doğrulama Sunucusu'na bir ipucu vermek 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 ipucundan yararlanı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 sekmelerde, farklı yönlendirme URI'si seçenekleri için örnek yetkilendirme URL'leri gösterilmektedir.

URL'ler, redirect_uri parametresinin değeri dışında özdeştir. 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=&
 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önüş IP adresi

https://accounts.google.com/o/oauth2/v2/auth?
 scope=&
 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 vermemeye karar verir. 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 özetini gösterir. Ardından kullanıcı, uygulamanız tarafından talep edilen bir veya daha fazla kapsam için erişim izni verebilir ya da isteği reddedebilir.

Google'ın OAuth 2.0 sunucusundan gelen yanıtın yapılıp yapılmadığını gösteren yanıt beklendiğinden, uygulamanızın bu aşamada herhangi bir işlem yapması gerekmez. Bu yanıt sonraki adımda açıklanmıştır.

Hatalar

Google'ın OAuth 2.0 yetkilendirme uç noktasına yapılan isteklerde, beklenen kimlik doğrulama ve yetkilendirme akışları yerine kullanıcıya yönelik hata mesajları gösterilebilir. Sık karşılaşılan 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. Bir yöneticinin OAuth istemci kimliğinize açıkça erişim izni verilene kadar, tüm kapsamlara veya hassas ve kısıtlanmış kapsamlara erişimi nasıl kısıtlayabileceği hakkında daha fazla bilgi edinmek için Google Workspace Yönetici yardım makalesine göz atın: Google Workspace verilerine hangi üçüncü taraf uygulamalar ve dahili uygulamaların erişebileceğini yönetme.

disallowed_useragent

Yetkilendirme uç noktası, Google'ın OAuth 2.0 Politikaları tarafından izin verilmeyen bir yerleşik 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 OpenID Foundation'ın Android için AppAuth 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çı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, işletim sisteminin varsayılan bağlantı işleyicisinde (Android App Links işleyicilerini veya varsayılan tarayıcı uygulamasını içeren) genel bağlantıların açılmasına izin vermelidir. Ayrıca, Android Özel Sekmeleri kitaplığı da desteklenen bir seçenektir.

iOS

iOS ve macOS geliştiricileri, WKWebView'te yetkilendirme istekleri 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 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 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ş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 kullanıcı rızası ekranını ayarlama yardım makalesindeki Kullanıcı türü bölümüne bakın.

invalid_grant

Kod doğrulayıcı ve sorgulama kodu 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. Kullanıcının kimliğini yeniden 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ği için yetkili bir 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ışını ifade edebilir. Entegrasyonunuzu güncellemek için taşıma rehberini inceleyin.

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

Uygulamanızın yetkilendirme yanıtını alma şekli, kullandığı yönlendirme URI'si şemasına bağlıdır. Şemadan bağımsız olarak, yanıt bir yetkilendirme kodu (code) veya bir hata (error) içerecektir. Örneğin, error=access_denied kullanıcının isteği reddettiğini belirtir.

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

5. Adım: Yenileme ve erişim jetonları için yetkilendirme kodu değiş tokuşu yapın

Bir erişim jetonuyla ilgili 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 API Console Credentials pagekaynağından alınan istemci kimliği.
client_secret API Console Credentials pageöğesinden alınan 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 projenizde 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, kısa ömürlü erişim jetonu ve yenileme jetonu içeren bir JSON nesnesi döndürerek bu isteğe yanıt verir.

Yanıtta aşağıdaki alanlar bulunur:

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. Yenilenen jetonları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 ayrılmış ve büyük/küçük harfe duyarlı dizelerin listesi olarak belirtilir.
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 erişim jetonu aldıktan sonra, bu API'nin gerektirdiği erişim kapsamlarının verilmesi durumunda jetonu, belirli bir kullanıcı hesabı adına bir Google API'sine çağrı yapmak için kullanabilirsiniz. Bunu yapmak için access_token sorgu parametresi veya Authorization HTTP üst bilgisi Bearer değeri ekleyerek API isteğine bir erişim jetonu ekleyin. Sorgu dizeleri sunucu günlüklerinde görüldüğü için, mümkün olduğunda HTTP üst bilgisi tercih edilir. Çoğu durumda, Google API'lerine ç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örüntüleyebilirsiniz.

HTTP GET örnekleri

Authorization: Bearer HTTP üst bilgisi kullanılarak drive.files uç noktasına (Drive Dosyalar API'si) 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

Kimliği doğrulanmış kullanıcı için access_token sorgu dizesi parametresini kullanarak aynı API'ye yapılan bir çağrıyı burada görebilirsiniz:

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 bilgi seçeneğini kullanan bir örneği burada bulabilirsiniz (tercih edilen):

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

Alternatif olarak, sorgu dizesi parametre 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 düzenli olarak dolar ve ilgili API isteği için geçersiz kimlik bilgisi haline gelir. Jetonla ilişkili kapsamlar için çevrimdışı erişim isteğinde bulunduysanız kullanıcıdan izin istemeden (kullanıcının mevcut olmadığı zamanlar da dahil) bir erişim jetonunu 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 Consolehesabından alınan istemci kimliği.
client_secret API Consoleöğesinden alınan istemci gizli anahtarı. (client_secret; Android, iOS veya Chrome uygulamaları olarak kaydedilen istemcilerden gelen istekler için geçerli değildir.)
grant_type OAuth 2.0 spesifikasyonunda açıklandığı 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ının 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"
}

Gönderilecek yenileme jetonu sayısı sınırlıdır. İstemci/kullanıcı kombinasyonu başına ve tüm istemcilerde kullanıcı başına bir adet sınır uygulanır. Yenileme jetonlarını uzun süreli depolamada saklamanız ve geçerli oldukları sürece kullanmaya devam etmeniz gerekir. Uygulamanız çok fazla yenileme jetonu istiyorsa bu sınırlarla karşılaşabilirsiniz. Bu durumda, eski yenileme jetonlarının çalışması durur.

Jetonları 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 destek dokümanına bakın.

Bir uygulamanın kendisine verilen erişimi programatik olarak iptal etmesi de mümkündür. Kullanıcının iptal etmesi, bir uygulamayı kaldırması veya uygulama için gereken API kaynaklarının önemli ölçüde değişmesi halinde programatik iptal işlemi önemlidir. Diğer bir deyişle, kaldırma işleminin bir parçası, daha önce uygulamaya verilen izinlerin kaldırılmasını sağlamak için bir API isteği içerebilir.

Uygulamanız bir jetonu programatik olarak iptal etmek için https://oauth2.googleapis.com/revoke isteğinde bulunur ve jetonu bir parametre olarak ekler:

curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
        https://oauth2.googleapis.com/revoke?token={token}

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 işlemi başarılı bir şekilde işlenirse yanıtın HTTP durum kodu 200 olur. Hata koşulları için 400 durum kodu, hata koduyla birlikte döndürülür.

Diğer Okumalar

IETF Mevcut En İyi Uygulaması Yerel Uygulamalar için OAuth 2.0, burada belgelenen en iyi uygulamaların çoğunu oluşturur.