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:
- Open the API Library Google API Consoleiçinde gösteriliyor.
- If prompted, select a project, or create a new one.
- 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.
- Etkinleştirmek istediğiniz API'yi seçip Etkinleştir düğmesini tıklayın.
- If prompted, enable billing.
- 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.
- Go to the Credentials page.
- Kimlik bilgisi oluştur > OAuth istemci kimliği seçeneğini tıklayın.
- Aşağıdaki bölümlerde, 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
- Android uygulama türünü seçin.
- OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page alanında gösterilir.
- Android uygulamanızın paket adını girin. Bu değer, uygulama manifest dosyanızdaki
<manifest>öğesinin
packageözelliğinde tanımlanır.
- 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 fingerprintsbölümündeki
SHA1değ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.
- (İsteğe bağlı) Android uygulamanızın sahipliğini doğrulayın.
- Create'i (Oluştur) tıklayın.
iOS
- iOS uygulama türünü seçin.
- OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page alanında gösterilir.
- Uygulamanızın paket tanımlayıcısını girin. Paket kimliği, uygulamanızın bilgi özelliği listesi kaynak dosyasındaki (info.plist) CFBundleIdentifier anahtarının değeridir. 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.
- (İ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.
- iOS veya iPadOS cihazınızda Apple App Store uygulamasını açın.
- Uygulamanızı arayın.
- Paylaş düğmesini (kare ve yukarı ok simgesi) seçin.
- Bağlantıyı Kopyala'yı seçin.
- Bağlantıyı bir metin düzenleyiciye yapıştırın. App Store Kimliği, URL'nin son kısmıdır.
Örnek:
https://apps.apple.com/app/google/id284815942
- (İsteğe bağlı)
Ekip kimliğinizi girin. Daha fazla bilgi için Apple Geliştirici Hesabı belgelerinde Ekip Kimliğinizi bulma bölümüne bakın.
- Create'i (Oluştur) tıklayın.
UWP
- Evrensel Windows Platformu uygulama türünü seçin.
- OAuth istemcisi için bir ad girin. Bu ad, istemciyi tanımlamak için projenizin Credentials page alanında gösterilir.
- 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.
- 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:
- Kodunuzu Google ile Oturum Açma SDK'sını kullanacak şekilde güncelleyin.
- Google API Konsolu'nda özel şema desteğini devre dışı bırakın.
Google ile Oturum Açma Android SDK'sına geçiş yapmak için aşağıdaki adımları uygulayın:
-
Google ile Oturum Açma Android SDK'sını kullanmak için kodunuzu güncelleyin:
-
Google'ın OAuth 2.0 sunucusuna 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_uriparametre tanımına bakın.
-
Google ile Oturum Açma SDK'sını yapılandırmak için ihtiyaç duyacağınız
scopeve
client_idistek parametrelerini not edin.
-
SDK'yı ayarlamak için
Google ile Oturum Açma'yı Android Uygulamanıza Entegre Etmeye Başlayın talimatlarını uygulayın. Önceki adımda aldığınız
client_iddeğerini yeniden kullanır gibi Arka uç sunucunuzun OAuth 2.0 istemci kimliğini alma adımını atlayabilirsiniz.
-
Sunucu Tarafı API erişimini etkinleştirme talimatlarını uygulayın. Buna aşağıdaki adımlar dahildir:
-
İzin istediğiniz kapsamlar için yetkilendirme kodu almak üzere
getServerAuthCodeyöntemini kullanın.
- Yetkilendirme kodunu uygulamanızın arka ucuna göndererek onu bir erişim ve yenileme jetonuyla değiştirin.
- Alınan erişim jetonunu, kullanıcı adına Google API'lerine çağrı yapmak için kullanın.
- İzin istediğiniz kapsamlar için yetkilendirme kodu almak üzere
- 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:
-
Google API Konsolu'nda özel şema desteğini devre dışı bırakın:
- OAuth 2.0 kimlik bilgileri listenize gidip Android istemcinizi seçin.
- Gelişmiş Ayarlar bölümüne gidin, Özel URI Şemasını Etkinleştir onay kutusunun işaretini kaldırın ve özel URI şeması desteğini devre dışı bırakmak için Kaydet'i tıklayın.
Özel URI şeması etkinleştiriliyorÖnerilen alternatif işe yaramazsa aşağıdaki talimatları uygulayarak Android istemciniz için özel URI şemalarını etkinleştirebilirsiniz:
- OAuth 2.0 kimlik bilgileri listenize gidip Android istemcinizi seçin.
- Gelişmiş Ayarlar bölümüne gidin, Özel URI Şemasını Etkinleştir onay kutusunu işaretleyin ve özel URI şeması desteğini etkinleştirmek için Kaydet'i tıklayın.
OAuth 2.0 yanıtını doğrudan uygulamanıza 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.
|düz
|Kod sorgulaması, yukarıda oluşturulan kod doğrulayıcı ile aynı değerdir.
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
Aşağıdaki tabloda, her yöntem için uygun


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


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_challenge_method
|Önerilen
Yetkilendirme kod değişimi sırasında kullanılacak bir


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


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