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 sayesinde kullanıcılar, bir uygulamayla belirli verileri paylaşırken kullanıcı adlarını, şifrelerini ve diğer bilgilerini gizli tutabilir. Örneğin, bir uygulama, kullanıcılardan Google Drive'larında dosya depolama izni almak için OAuth 2.0'ı kullanabilir.
Yüklenen uygulamalar ayrı cihazlara dağıtılır ve bu uygulamaların gizlilik sağlayamayacağı varsayılır. Kullanıcı uygulamadayken veya uygulama arka planda çalışırken Google API'lerine erişebilirler.
Bu yetkilendirme akışı, web sunucusu uygulamaları için kullanılan akışa benzer. Bu iki yöntem arasındaki temel fark, yüklenen uygulamaların Google'ın yetkilendirme sunucusundan gelen yanıtları işlemek için sistem tarayıcısını açması ve yerel bir yönlendirme URI'si sağlamasıdır.
Alternatifler
Mobil uygulamalar için Android veya iOS'te Google ile oturum açma özelliğini tercih edebilirsiniz. Google Sign-in istemci kitaplıkları, kimlik doğrulama ve kullanıcı yetkilendirmesini yönetir. Bu kitaplıkların uygulanması, burada açıklanan alt düzey protokolden daha basit olabilir.
Sistem tarayıcısını desteklemeyen veya sınırlı giriş özelliklerine sahip cihazlarda (ör. TV'ler, oyun konsolları, kameralar veya yazıcılar) ç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 başlıklı makalelere göz atın.
Kitaplıklar ve örnekler
Bu belgede açıklanan OAuth 2.0 akışını uygulamanıza yardımcı olması için aşağıdaki kitaplıkları ve örnekleri öneririz:
- Android için AppAuth kitaplığı
- iOS için AppAuth kitaplığı
- Uygulamalar için OAuth: Windows Örnekleri
Ön koşullar
Projeniz için API'leri etkinleştirme
Google API'lerini çağıran tüm uygulamaların bu API'leri API Console'te etkinleştirmesi gerekir.
Projeniz için bir API'yi etkinleştirmek üzere:
- Open the API Library , Google API Console
- If prompted, select a project, or create a new one.
- Bu API Library sayfada, ürün ailesine ve popülerliğe göre gruplandırılmış tüm mevcut API'ler listelenir. Etkinleştirmek istediğiniz API listede görünmüyorsa arama yaparak bulabilir veya ait olduğu ürün ailesinde Tümünü Görüntüle'yi tıklayabilirsiniz.
- Etkinleştirmek istediğiniz API'yi seçin ve ardından 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ın, Google'ın OAuth 2.0 sunucusunda uygulamayı 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. Ardından, uygulamalarınız bu proje için etkinleştirdiğiniz API'lere erişmek üzere 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 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.
Yapay Zeka
- Android uygulama türünü seçin.
- OAuth istemcisi için bir ad girin. Bu ad, müşteriyi tanımlamak için projenizde gösterilir. Credentials page
- Android uygulamanızın paket adını girin. Bu değer, uygulama manifest dosyanızdaki
<manifest>
öğesininpackage
özelliğinde tanımlanır. - Uygulama dağıtımının SHA-1 imza sertifikası 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ı 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ündekiSHA1
değerini kopyalayın. Daha fazla bilgi için Android için Google API'leri dokümanlarında yer alan İstemcinizin Kimliğini Doğrulama bölümüne bakın.
- (İsteğe bağlı) Android uygulamanızın sahipliğini doğrulayın.
- Oluştur'u tıklayın.
iOS
- iOS uygulama türünü seçin.
- OAuth istemcisi için bir ad girin. Bu ad, müşteriyi tanımlamak için projenizde gösterilir. Credentials page
- Uygulamanızın paket kimliğini girin. Paket kimliği, uygulamanızın bilgi mülkü listesi kaynak dosyasında (info.plist) bulunan CFBundleIdentifier anahtarının değeridir. 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 sitesinde uygulamanın Uygulama Bilgileri sayfasındaki Genel Bilgiler bölümünde de gösterilir.
Uygulama Kontrolü özelliğini kullanıyorsanız bunu değiştiremeyeceğiniz için uygulamanız için doğru paket kimliğini kullandığınızdan emin olun.
- (İsteğe bağlı)
Uygulama, Apple'ın App Store'unda yayınlanmışsa uygulamanızın App Store kimliğini girin. Mağaza kimliği, her Apple App Store URL'sine dahil edilmiş 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üzenleyicide 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 Developer Account belgelerindeki Ekip kimliğinizi bulma bölümünü inceleyin.
Not: İstemciniz için Uygulama Kontrolü'nü etkinleştiriyorsanız Ekip Kimliği alanı zorunludur. - (İsteğe bağlı)
iOS uygulamanız için Uygulama Kontrolü'nü etkinleştirin. Uygulama Kontrolü'nü etkinleştirdiğinizde, OAuth istemcinizden gelen OAuth 2.0 isteklerinin gerçek olduğundan ve uygulamanızdan geldiğinden emin olmak için Apple'ın App Attest hizmeti kullanılır. Bu, uygulama kimliğine bürünme riskini azaltmaya yardımcı olur. iOS uygulamanız için Uygulama Kontrolü'nü etkinleştirme hakkında daha fazla bilgi edinin.
- Oluştur'u tıklayın.
UWP
- Evrensel Windows Platformu uygulama türünü seçin.
- OAuth istemcisi için bir ad girin. Bu ad, müşteriyi tanımlamak için projenizde gösterilir. Credentials page
- Uygulamanızın 12 karakterli Microsoft Store kimliğini girin. Bu değeri, Microsoft İş Ortağı Merkezi'ndeki Uygulama yönetimi bölümündeki Uygulama kimliği sayfasında bulabilirsiniz.
- Oluştur'u tıklayın.
UWP uygulamaları için özel URI şeması 39 karakterden uzun olamaz.
Erişim kapsamlarını belirleme
Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim isteğinde bulunmasını sağlarken kullanıcıların da uygulamanıza verdikleri erişim miktarını kontrol etmelerini sağlar. Bu nedenle, istenen kapsamların sayısı ile kullanıcı izni alma olasılığı arasında ters bir ilişki olabilir.
OAuth 2.0 yetkilendirmesini uygulamaya başlamadan önce, uygulamanızın erişmek için izin alması gereken kapsamları belirlemenizi öneririz.
OAuth 2.0 API Kapsamları belgesi, Google API'lerine erişmek için kullanabileceğiniz kapsamların tam listesini içerir.
OAuth 2.0 erişim jetonları alma
Aşağıdaki adımlarda, uygulamanızın kullanıcı adına API isteği gerçekleştirmek için kullanıcının iznini almak amacıyla Google'ın OAuth 2.0 sunucusuyla nasıl etkileşimde bulunduğu gösterilmektedir. Kullanıcı yetkilendirmesi gerektiren bir Google API isteğini yürütebilmesi için uygulamanızın bu izne sahip olması gerekir.
1. Adım: Kod doğrulayıcı ve istem oluşturun
Google, yüklü uygulama akışını daha güvenli hale getirmek için Proof Key for Code Exchange (PKCE) protokolünü destekler. Her yetkilendirme isteği için benzersiz bir kod doğrulayıcı oluşturulur ve "code_challenge" adlı dönüştürülmüş değeri, yetkilendirme kodunu almak için yetkilendirme sunucusuna gönderilir.
Kod doğrulayıcıyı oluşturma
code_verifier
, [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~" karakterlerini kullanan, en az 43 ve en fazla 128 karakter uzunluğunda, yüksek entropili kriptografik rastgele bir dizedir.
Kod doğrulayıcı, değeri tahmin etmeyi pratik dışı hale getirecek kadar entropi içermelidir.
Kod doğrulamasını oluşturma
Kodlu kimlik doğrulama oluşturmanın iki yöntemi desteklenir.
Kod Sorgusu Oluşturma Yöntemleri | |
---|---|
S256 (önerilir) | Kod kimlik sorgusu, kod doğrulayıcının Base64URL (doldurulmamış) kodlamalı SHA256 karmasıdır.
|
plain | Kod isteği, yukarıda oluşturulan kod doğrulayıcıyla aynı değerdir.
|
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
adresindeki Google yetkilendirme sunucusuna istek gönderin. Bu uç nokta, etkin oturum aramasını yönetir, kullanıcının kimliğini doğrular ve kullanıcı iznini 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 şu adreste bulabilirsiniz: API Console Credentials page. |
||||||
redirect_uri |
Zorunlu
Google'ın yetkilendirme sunucusunun uygulamanıza nasıl yanıt göndereceğini belirler. Yüklü uygulamalar için çeşitli yönlendirme seçenekleri vardır ve yetkilendirme kimlik bilgilerinizi belirli bir yönlendirme yöntemini göz önünde bulundurarak ayarlamanız gerekir. Değer, OAuth 2.0 istemcisinin yetkili yönlendirme URI'lerinden biriyle tam olarak eşleşmelidir. Bu URI'yi istemcinizin API Console
Credentials pagebölümünde yapılandırdınız. 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ürmeyeceğ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 ayrılmış bir kapsam listesi. Bu değerler, Google'ın kullanıcıya gösterdiği izin ekranını bilgilendirir. Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim isteğinde bulunmasını sağlar. Ayrıca kullanıcıların, uygulamanıza verdikleri erişim miktarını kontrol etmelerini de sağlar. Bu nedenle, istenen kapsamların sayısı ile kullanıcı izni alma olasılığı arasında ters bir ilişki vardır. |
||||||
code_challenge |
Önerilen
Yetkilendirme kodu alışverişi sırasında sunucu tarafı istem olarak kullanılacak kodlanmış bir |
||||||
code_challenge_method |
Önerilen
Yetkilendirme kodu alışverişi sırasında kullanılacak |
||||||
state |
Önerilen
Uygulamanızın, yetkilendirme isteğiniz ile yetkilendirme sunucusunun yanıtı arasında durumu korumak için kullandığı tüm dize değerlerini belirtir.
Sunucu, kullanıcı uygulamanızın erişim isteğini onayladıktan veya reddettikten sonra Bu parametreyi, kullanıcıyı uygulamanızdaki doğru kaynağa yönlendirme, tek seferlik kimlikler gönderme ve siteler arası istek sahteciliğini azaltma gibi çeşitli amaçlar için kullanabilirsiniz. |
||||||
login_hint |
İsteğe bağlı
Uygulamanız hangi kullanıcının kimliğini doğrulamaya çalıştığını biliyorsa Google Kimlik Doğrulama Sunucusu'na ipucu vermek için bu parametreyi kullanabilir. Sunucu, oturum açma formundaki e-posta alanını önceden doldurarak veya uygun çoklu oturum oturumunu seçerek oturum açma akışını basitleştirmek için ipucunu kullanır. Parametre değerini, kullanıcının Google kimliğine eşdeğer olan bir e-posta adresine veya |
Örnek yetkilendirme URL'leri
Aşağıdaki sekmelerde, farklı yönlendirme URI seçenekleri için örnek yetkilendirme URL'leri gösterilmektedir.
URL'ler, redirect_uri
parametresinin değeri dışında aynıdır. URL'ler, isteğe bağlı state
parametresinin yanı sıra zorunlu response_type
ve client_id
parametrelerini de içerir. Her URL, okunaklılığı artırmak için satır sonları ve boşluklar içerir.
Özel URI şeması
https://accounts.google.com/o/oauth2/v2/auth? scope=email%20profile& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=com.example.app%3A/oauth2redirect& client_id=client_id
Geri döngü IP adresi
https://accounts.google.com/o/oauth2/v2/auth? scope=email%20profile& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=http%3A//127.0.0.1%3A9004& client_id=client_id
3. Adım: Google, kullanıcıdan izin ister.
Bu adımda kullanıcı, uygulamanıza istenen erişimi verip vermeyeceğine karar verir. Bu aşamada Google, uygulamanızın adını ve kullanıcının yetkilendirme kimlik bilgileriyle erişim izni istediği Google API hizmetlerini gösteren bir izin penceresi ile birlikte, verilecek erişim kapsamlarının bir özetini gösterir. Kullanıcı, uygulamanız tarafından istenen bir veya daha fazla kapsama erişim izni vermeyi kabul edebilir ya da isteği reddedebilir.
Google'ın OAuth 2.0 sunucusundan erişim izni verilip verilmediğini belirten yanıtı beklerken uygulamanızın bu aşamada herhangi bir işlem yapması gerekmez. Bu yanıt, aşağıdaki adımda açıklanmıştır.
Hatalar
Google'ın OAuth 2.0 yetkilendirme uç noktasına yapılan istekler, beklenen kimlik doğrulama ve yetkilendirme akışları yerine kullanıcılara yönelik hata mesajları gösterebilir. 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 için Google Workspace Yöneticisi yardım makalesini Google Workspace verilerine hangi üçüncü taraf uygulamalarının ve dahili uygulamaların erişebileceğini yönetme inceleyin.
disallowed_useragent
Yetkilendirme uç noktası, Google'ın OAuth 2.0 Politikaları tarafından izin verilmeyen yerleşik bir kullanıcı aracısı içinde gösteriliyor.
Yapay Zeka
Android geliştiricileri, android.webkit.WebView
'te yetkilendirme isteklerini açarken bu hata mesajıyla karşılaşabilir.
Geliştiriciler bunun yerine Android için Google ile Oturum Açma veya OpenID Foundation'ın Android için AppAuth gibi Android kitaplıklarını kullanmalıdır.
Web geliştiricileri, bir Android uygulaması yerleşik 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 bu hatayla karşılaşabilir. Geliştiriciler, genel bağlantıların işletim sisteminin varsayılan bağlantı işleyicisinde açılmasına izin vermelidir. Bu işleyiciler hem Android Uygulama Bağlantıları işleyicilerini hem de varsayılan tarayıcı uygulamasını içerir. Android Özel Sekmeler kitaplığı da desteklenen bir seçenektir.
iOS
iOS ve macOS geliştiricileri, WKWebView
'te yetkilendirme isteklerini açarken bu hatayla karşılaşabilir.
Geliştiriciler bunun yerine iOS için Google ile oturum açma veya OpenID Foundation'ın iOS için AppAuth gibi iOS kitaplıklarını kullanmalıdır.
Web geliştiricileri, bir iOS veya macOS uygulaması yerleşik 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 bu hatayla karşılaşabilir. Geliştiriciler, genel bağlantıların işletim sisteminin varsayılan bağlantı işleyicisinde açılmasına izin vermelidir. Bu işleyiciler hem Evrensel Bağlantılar işleyicilerini hem de varsayılan tarayıcı uygulamasını içerir. SFSafariViewController
kitaplığı da desteklenen bir seçenektir.
org_internal
İstekte bulunan OAuth istemci kimliği, belirli bir Google Cloud kuruluşunda 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 edinmek için OAuth izin ekranınızı ayarlama yardım makalesindeki Kullanıcı türü bölümüne bakın.
invalid_grant
Kod doğrulayıcı ve istem kullanıyorsanız code_callenge
parametresi geçersiz veya eksik. code_challenge
parametresinin doğru şekilde ayarlandığından emin olun.
Erişim jetonu yenilenirken jetonun süresi dolmuş veya jeton geçersiz kılınmış olabilir. Kullanıcının kimliğini tekrar doğrulayın ve yeni jeton almak için kullanıcıdan izin isteyin. Bu hatayı görmeye devam ediyorsanız uygulamanızın doğru şekilde yapılandırıldığından ve isteğinizde doğru 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 pagebölümündeki yetkili yönlendirme URI'lerini inceleyin.
İletilen redirect_uri
, istemci türü için geçersiz olabilir.
redirect_uri
parametresi, kullanımdan kaldırılmış ve artık desteklenmeyen OAuth bant dışı (OOB) akışını referans alabilir. Entegrasyonunuzu güncellemek için taşıma kılavuzunu inceleyin.
invalid_request
Gönderdiğiniz istekte bir sorun vardı. Bunun birkaç nedeni olabilir:
- İstek doğru şekilde biçimlendirilmemiş
- İstekte gerekli parametreler eksik
- İstek, Google'ın desteklemediği bir yetkilendirme yöntemi kullanıyor. OAuth entegrasyonunuzun önerilen bir entegrasyon yöntemini kullandığından emin olun
- Yönlendirme URI'si için özel bir şema kullanılıyor : Özel URI şeması Chrome uygulamalarında desteklenmiyor veya Özel URI şeması Android istemciniz için etkin değil hata mesajını görüyorsanız Chrome uygulamalarında desteklenmeyen ve Android'de varsayılan olarak devre dışı bırakılan özel bir URI şeması kullanıyorsunuz demektir. Özel URI şeması alternatifleri hakkında daha fazla bilgi edinin.
4. adım: OAuth 2.0 sunucu yanıtını işleyin
Uygulamanızın yetkilendirme yanıtını alma şekli, kullandığı yönlendirme URI şemasına bağlıdır. Şemadan bağımsız olarak yanıt, bir yetkilendirme kodu (code
) veya 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 bir sonraki adımda açıklandığı gibi yetkilendirme kodunu erişim jetonu ve yenileme jetonuyla değiştirebilirsiniz.
5. Adım: Yenileme ve erişim jetonları için yetkilendirme kodu değiş tokuşu yapın
Yetkilendirme kodunu erişim jetonuyla 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 pageadresinden alınan istemci kimliği. |
client_secret |
API Console Credentials pageadresinden 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ığı şekliyle bu alanın değeri authorization_code olarak ayarlanmalıdır. |
redirect_uri |
Belirli bir client_id için API Consolebölümündeki projeniz için listelenen yönlendirme URI'lerinden biri
Credentials page . |
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 süreli bir erişim jetonu ve yenileme jetonu içeren bir JSON nesnesi döndürerek 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 kalan kullanım ömrü (saniye cinsinden). |
id_token |
Not: Bu özellik yalnızca isteğiniz openid , profile veya email gibi bir kimlik kapsamı içeriyorsa döndürülür. Değer, kullanıcıyla ilgili dijital olarak imzalanmış kimlik bilgilerini içeren bir JSON Web Jetonu'dur (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 ayrılmış, büyük/küçük harfe duyarlı dizelerin listesi olarak ifade edilir. |
token_type |
Döndürülen jeton türü. Bu aşamada bu alanın değeri her zaman Bearer olarak ayarlanı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 https://www.googleapis.com/auth/calendar.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
6. adım: Kullanıcıların hangi kapsamları verdiğini kontrol edin
Kullanıcılar, tek seferde birden fazla kapsam isteğinde bulunduğunuzda uygulamanızın istediği tüm kapsamları vermeyebilir. Uygulamanız, kullanıcı tarafından hangi kapsamların verildiğini her zaman kontrol etmeli ve ilgili özellikleri devre dışı bırakarak kapsam reddi durumlarını ele almalıdır. Daha fazla bilgi için Ayrıntılı izinleri yönetme başlıklı makaleyi inceleyin.
Kullanıcının uygulamanıza belirli bir kapsama erişim izni verip vermediğini kontrol etmek için erişim jetonu yanıtındaki scope
alanını inceleyin. access_token tarafından verilen erişim kapsamları, boşlukla ayrılmış, büyük/küçük harf duyarlı dizelerin listesi olarak ifade edilir.
Örneğin, aşağıdaki örnek erişim jetonu yanıtı, kullanıcının uygulamanıza salt okunur Drive etkinliği ve Takvim etkinlikleri izinlerine erişim izni verdiğini gösterir:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
Google API'lerini çağırma
Uygulamanız bir erişim jetonu aldıktan sonra, API tarafından istenen erişim kapsamları verilmişse belirli bir kullanıcı hesabı adına bir Google API'sine çağrı yapmak için jetonu kullanabilirsiniz. Bunu yapmak için access_token
sorgu parametresi veya Authorization
HTTP üst bilgisi Bearer
değeri ekleyerek erişim jetonunu API'ye gönderilen bir isteğe ekleyin. Sorgu dizeleri sunucu günlüklerinde görünmeye eğilimli 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).
Tüm Google API'lerini deneyebilir ve kapsamlarını OAuth 2.0 Playground'da 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 kullanan aynı API'ye yapılan bir çağrı aşağıda verilmiştir:
GET https://www.googleapis.com/drive/v2/files?access_token=access_token
curl
örnek
Bu komutları curl
komut satırı uygulamasıyla test edebilirsiniz. HTTP üst bilgisi seçeneğini kullanan bir örneği aşağıda bulabilirsiniz (tercih edilir):
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files
Alternatif olarak sorgu dizesi parametresi seçeneğini de kullanabilirsiniz:
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 bilgileri haline gelir. Jetonla ilişkili kapsamlara çevrimdışı erişim isteğinde bulunduysanız kullanıcıdan izin istemeden (kullanıcı mevcut olmadığında 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ğinde bulunur:
Alanlar | |
---|---|
client_id |
API Consolekaynağından alınan istemci kimliği. |
client_secret |
API Consolekaynağından alınan istemci gizli anahtarı.
(client_secret , Android, iOS veya Chrome uygulaması olarak kaydedilen 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 https://www.googleapis.com/auth/calendar.readonly", "token_type": "Bearer" }
Verilecek yenileme jetonu sayısıyla ilgili sınırlamalar olduğunu unutmayın. Bu sınırlamalar, istemci/kullanıcı kombinasyonu başına bir tane ve tüm istemciler genelinde kullanıcı başına bir tanedir. 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ırlara ulaşabilir. Bu durumda eski yenileme jetonları çalışmayı durdurur.
Jetonu iptal etme
Bazı durumlarda kullanıcılar, bir uygulamaya verilen erişimi iptal etmek isteyebilir. Kullanıcılar Hesap Ayarları'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ünü inceleyin.
Bir uygulamanın kendisine verilen erişimi programatik olarak iptal etmesi de mümkündür. Programatik iptal, kullanıcının aboneliğini iptal ettiği, bir uygulamayı kaldırdığı veya bir uygulamanın ihtiyaç duyduğu API kaynaklarının önemli ölçüde değiştiği durumlarda önemlidir. Diğer bir deyişle, kaldırma işleminin bir kısmı, daha önce uygulamaya verilen izinlerin kaldırılmasını sağlamak için bir API isteği içerebilir.
Bir jetonu programatik olarak iptal etmek için uygulamanız https://oauth2.googleapis.com/revoke
adresine bir istek gönderir ve jetonu parametre olarak ekler:
curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \ https://oauth2.googleapis.com/revoke?token={token}
Jeton, erişim jetonu veya yenileme jetonu olabilir. Jeton bir erişim jetonuysa ve buna karşılık gelen bir yenileme jetonu varsa yenileme jetonu da iptal edilir.
İptal işlemi başarıyla işlenirse yanıtın HTTP durum kodu 200
olur. Hata durumlarında, hata koduyla birlikte bir HTTP durum kodu 400
döndürülür.
Uygulama yönlendirme yöntemleri
Özel URI şeması (Android, iOS, UWP)
Özel URI şemaları, uygulamanızı açmak için özel olarak tanımlanmış bir şema kullanan bir derin bağlantı biçimidir.
Android'de özel URI şemalarını kullanmaya alternatif
OAuth 2.0 yanıtını doğrudan uygulamanıza göndererek yönlendirme URI'sine ihtiyaç duyulmasını ortadan kaldıran Android için Google ile Oturum Açma SDK'sını kullanın.
Android için Google ile Oturum Açma SDK'sına geçiş yapma
Android'de OAuth entegrasyonunuz için özel bir şema kullanıyorsanız önerilen Android için Google Sign-In SDK'sını kullanmaya tamamen geçiş yapmak üzere aşağıdaki işlemleri tamamlamanız gerekir:
- Kodunuzu Google Sign-In SDK'sını kullanacak şekilde güncelleyin.
- Google API Konsolu'nda özel şema desteğini devre dışı bırakın.
Google Sign-In Android SDK'sına geçmek için aşağıdaki adımları uygulayın:
-
Kodunuzu Google Sign-In Android SDK'sını kullanacak şekilde güncelleyin:
-
Google'ın OAuth 2.0 sunucusuna nerede istek gönderdiğinizi 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 örnekteki özel şema yönlendirme URI'sidir. Özel URI şeması değerinin biçimi hakkında daha fazla bilgi içinredirect_uri
parametre tanımına bakın. -
Google Sign-In SDK'sını yapılandırmak için ihtiyaç duyacağınız
scope
veclient_id
istek parametrelerini not edin. -
SDK'yı ayarlamak için
Google ile oturum açma özelliğini Android uygulamanıza entegre etmeye başlama
talimatlarını uygulayın. Önceki adımda aldığınız
client_id
değerini yeniden kullanacağınız için Arka uç sunucunuzun OAuth 2.0 istemci kimliğini alın adımını atlayabilirsiniz. -
Sunucu Tarafı API erişimini etkinleştirme
talimatlarını uygulayın. Bu işlem aşağıdaki adımları içerir:
-
İzin istediğiniz kapsamlar için bir kimlik doğrulama kodu almak üzere
getServerAuthCode
yöntemini kullanın. - Yetkilendirme kodunu, erişim ve yenileme jetonuyla değiştirmek için uygulamanızın arka ucuna gönderin.
- Kullanıcı adına Google API'lerine çağrı yapmak için alınan erişim jetonunu kullanın.
-
İzin istediğiniz kapsamlar için bir kimlik doğrulama kodu almak üzere
-
Google'ın OAuth 2.0 sunucusuna nerede istek gönderdiğinizi 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ırakma:
- OAuth 2.0 kimlik bilgileriniz listesine gidip Android istemcinizi seçin.
- Özel URI şeması desteğini devre dışı bırakmak için Gelişmiş Ayarlar bölümüne gidin, Özel URI Şemasını Etkinleştir onay kutusunun işaretini kaldırın ve Kaydet'i tıklayın.
Özel URI şemasını etkinleştirme
Önerilen alternatif sizin için uygun değilse aşağıdaki talimatları uygulayarak Android istemciniz için özel URI şemalarını etkinleştirebilirsiniz:- OAuth 2.0 kimlik bilgileri listenize gidin ve Android istemcinizi seçin.
- Özel URI şeması desteğini etkinleştirmek için Gelişmiş Ayarlar bölümüne gidin, Özel URI Şemasını Etkinleştir onay kutusunu işaretleyin ve Kaydet'i tıklayın.
Chrome uygulamalarında özel URI şemalarını kullanmaya alternatif
OAuth 2.0 yanıtını doğrudan uygulamanıza göndererek yönlendirme URI'si kullanma ihtiyacını ortadan kaldıran Chrome Identity API'yi kullanın.
Geri döngü IP adresi (macOS, Linux, Windows masaüstü)
Bu URL'yi kullanarak yetkilendirme kodunu almak için uygulamanızın yerel web sunucusunda dinleme modunda olması gerekir. Bu işlem tüm platformlarda olmasa da çoğunda yapılabilir. Ancak platformunuz bu özelliği destekliyorsa yetkilendirme kodunu almak için önerilen mekanizma budur.
Uygulamanız yetkilendirme yanıtını aldığında, en iyi kullanılabilirlik için kullanıcıya tarayıcıyı kapatıp uygulamanıza dönmesini bildiren bir HTML sayfası görüntüleyerek yanıt vermelidir.
Önerilen kullanım | macOS, Linux ve Windows masaüstü (Evrensel Windows Platformu hariç) uygulamaları |
Form değerleri | Uygulama türünü Masaüstü uygulaması olarak ayarlayın. |
Manuel kopyalama/yapıştırma (Desteği sonlandırıldı)
Uygulamalarınızı koruma
Uygulama sahipliğini doğrulama (Android, Chrome)
Uygulama kimliğine bürünme riskini azaltmak için uygulamanızın sahipliğini doğrulayabilirsiniz.
Yapay Zeka
Doğrulama sürecini tamamlamak için Google Play geliştirici hesabınızı (varsa) ve uygulamanızın Google Play Console'a kayıtlı olması gerekir. Doğrulamanın başarılı olması için aşağıdaki koşullar karşılanmalıdır:
- Google Play Console'da, doğrulamayı tamamladığınız Android OAuth istemciyle aynı paket adına ve SHA-1 imza sertifikası parmak izine sahip kayıtlı bir uygulamanız olmalıdır.
- Google Play Console'da uygulama için Yönetici iznine sahip olmanız gerekir. Google Play Console'da erişim yönetimi hakkında daha fazla bilgi edinin.
Doğrulama sürecini tamamlamak için Android istemcisinin Uygulama Sahipliğini Doğrula bölümünde Sahiplik Doğrula düğmesini tıklayın.
Doğrulama başarılı olursa doğrulama sürecinin başarılı olduğunu onaylayan bir bildirim gösterilir. Aksi takdirde bir hata istemi gösterilir.
Başarısız doğrulamayı düzeltmek için aşağıdakileri deneyin:
- Doğruladığınız uygulamanın Google Play Console'da kayıtlı olduğundan emin olun.
- Google Play Console'da uygulama için Yönetici iznine sahip olduğunuzdan emin olun.
Chrome
Doğrulama sürecini tamamlamak için Chrome Web Mağazası geliştirici hesabınızı kullanırsınız. Doğrulamanın başarılı olması için aşağıdaki şartlar karşılanmalıdır:
- Chrome Web Mağazası Geliştirici Kontrol Paneli'nde, doğrulamayı tamamladığınız Chrome uzantısı OAuth istemcisinin kimliğiyle aynı kimliğe sahip kayıtlı bir öğeniz olmalıdır.
- Chrome Web Mağazası öğesinin yayıncısı 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 sürecini tamamlamak için Sahiplik Doğrula düğmesini tıklayın.
Not: Hesabınıza erişim izni verdikten sonra doğrulama sürecini tamamlamadan önce birkaç dakika bekleyin.
Doğrulama başarılı olursa doğrulama sürecinin başarılı olduğunu onaylayan bir bildirim gösterilir. Aksi takdirde bir hata istemi gösterilir.
Başarısız doğrulamayı düzeltmek için aşağıdakileri deneyin:
- Chrome Web Mağazası Geliştirici Kontrol Paneli'nde, doğrulamayı tamamladığınız Chrome Uzantısı OAuth istemcisinin aynı öğe kimliğine sahip kayıtlı bir öğe bulunduğundan emin olun.
- Uygulamanın yayıncısı olduğunuzdan emin olun. Yani uygulamanın bireysel yayıncısı veya uygulamanın grup yayıncısının bir üyesi olmanız gerekir. Chrome Web Mağazası Geliştirici Kontrol Paneli'nde erişim yönetimi hakkında daha fazla bilgi edinin.
- Grup yayıncı listenizi yeni güncellediyseniz grup yayıncı üyeliği listesinin Chrome Web Mağazası Geliştirici Kontrol Paneli'nde senkronize edildiğinden emin olun. Yayıncı üyelik listenizi senkronize etme hakkında daha fazla bilgi edinin.
Uygulama Kontrolü (yalnızca iOS)
Uygulama Kontrolü özelliği, Google OAuth 2.0 uç noktalarına yapılan isteklerin orijinal uygulamalarınızdan gelip gelmediğini doğrulamak için Apple'ın App Attest hizmetini kullanarak iOS uygulamalarınızı yetkisiz kullanıma karşı korumaya yardımcı olur. Bu, uygulama kimliğine bürünme riskini azaltmaya yardımcı olur.
iOS istemciniz için Uygulama Kontrolü'nü etkinleştirme
iOS istemciniz için Uygulama Kontrolü'nü başarıyla etkinleştirmek üzere aşağıdaki koşulların karşılanması gerekir:- iOS istemciniz için bir ekip kimliği belirtmeniz gerekir.
- Birden fazla uygulamaya yönlendirebileceği için paket kimliğinizde joker karakter kullanmamanız gerekir. Yani paket kimliği, yıldız (*) işareti içermemelidir.
Uygulama Kontrolü'nü etkinleştirdikten sonra, istemcinizden gelen OAuth istekleriyle ilgili metrikleri OAuth istemcisinin düzenleme görünümünde görmeye başlarsınız. Doğrulanmamış kaynaklardan gelen istekler, Uygulama Kontrolü'nü zorunlu kılana kadar engellenmez. Metrik izleme sayfasındaki bilgiler, yaptırımı ne zaman başlatacağınızı belirlemenize yardımcı olabilir.
iOS uygulamanız için Uygulama Denetimi'ni etkinleştirirken Uygulama Denetimi özelliğiyle ilgili hatalar görebilirsiniz. Bu hataları düzeltmek için aşağıdakileri deneyin:
- Belirttiğiniz paket kimliğinin ve ekip kimliğinin geçerli olup olmadığını doğrulayın.
- Paket kimliği için joker karakter kullanmadığınızdan emin olun.
iOS istemciniz için uygulama kontrolünü zorunlu kılma
Uygulamanız için Uygulama Kontrolü'nü etkinleştirmek, tanınmayan istekleri otomatik olarak engellemez. Bu korumayı uygulamak için iOS istemcinizi düzenleme görünümüne gidin. Burada, sayfanın sağ tarafındaki iOS için Google Kimliği bölümünde Uygulama Kontrolü metriklerini görürsünüz. Metrikler aşağıdaki bilgileri içerir:- Doğrulanmış isteklerin sayısı: Geçerli bir Uygulama Kontrolü jetonu içeren istekler. Uygulama Kontrolü yaptırımını etkinleştirdikten sonra yalnızca bu kategorideki istekler başarılı olur.
- Doğrulanmamış isteklerin sayısı: güncel olmayabilecek istemci istekleri: Uygulama Kontrolü jetonu bulunmayan istekler. Bu istekler, uygulamanızın Uygulama Kontrolü uygulaması içermeyen eski bir sürümünden gelmiş olabilir.
- Doğrulanmamış istek sayısı: bilinmeyen kaynak istekleri: Uygulama Kontrolü jetonu bulunmayan ve uygulamanızdan geldiği kesin olmayan istekler.
- Doğrulanmamış istek sayısı: geçersiz istekler: Geçersiz bir Uygulama Kontrolü jetonu bulunan (uygulamanın kimliğine bürünmeye çalışan asılsız bir istemciden veya emüle edilmiş ortamlardan gelebilecek) istekler.
Uygulama Kontrolü'nü zorunlu kılmak için ENFORCE düğmesini tıklayın ve seçiminizi onaylayın. Zorunlu kılındıktan sonra, istemcinizden gelen tüm doğrulanmamış istekler reddedilir.
Not: Yaptırım özelliğini etkinleştirdikten sonra değişikliklerin geçerlilik kazanması 15 dakikayı bulabilir.
iOS istemciniz için Uygulama Kontrolü zorunluluğunu kaldırma
Uygulamanız için Uygulama Kontrolü zorunluluğunu kaldırmak zorunlulaştırmayı durdurur ve doğrulanmamış istekler dahil olmak üzere istemcinizden Google OAuth 2.0 uç noktalarına yapılan tüm isteklere izin verir.
iOS istemciniz için Uygulama Denetimi'ni devre dışı bırakmak isterseniz iOS istemcisinin düzenleme görünümüne gidin, DEVRE DIŞI BIRAK düğmesini tıklayın ve seçiminizi onaylayın.
Not: Uygulama Kontrolü'nün zorunluluğunu kaldırdıktan sonra değişikliklerin geçerlilik kazanması 15 dakikayı bulabilir.
iOS istemciniz için Uygulama Kontrolü'nü devre dışı bırakma
Uygulamanız için Uygulama Kontrolü'nü devre dışı bıraktığınızda tüm Uygulama Kontrolü izleme ve zorunlu kılma işlemleri durdurulur. İstemcinizin metriklerini izlemeye devam edebilmek için Uygulama Kontrolü'nü devre dışı bırakmayı düşünebilirsiniz.
iOS istemciniz için Uygulama Kontrolü'nü devre dışı bırakmak üzere iOS istemcisinin düzenleme görünümüne gidin ve OAuth istemcinizi Firebase Uygulama Kontrolü ile kötüye kullanıma karşı koruyun açma/kapatma düğmesini kapatın.
Not: Uygulama Kontrolü devre dışı bırakıldıktan sonra değişikliklerin geçerlilik kazanması 15 dakikayı bulabilir.
Daha fazla bilgi
IETF'nin Doğal Uygulamalar için OAuth 2.0 ile ilgili Mevcut En İyi Uygulamaları belgesinde, burada açıklanan en iyi uygulamaların çoğu yer alır.
Hesaplar Arası Koruma'yı uygulama
Kullanıcılarınızın hesaplarını korumak için atmanız gereken bir diğer adım da Google'ın Hesaplar Arası Koruma Hizmeti'ni kullanarak Hesaplar Arası Koruma'yı uygulamaktır. Bu hizmet, kullanıcı hesabında yapılan önemli değişikliklerle ilgili olarak uygulamanıza bilgi sağlayan güvenlik etkinliği bildirimlerine abone olmanızı sağlar. Ardından, etkinliklere nasıl yanıt vermeye karar verdiğiniz doğrultusunda işlem yapmak için bu bilgileri kullanabilirsiniz.
Google'ın Hesaplar Arası Koruma Hizmeti tarafından uygulamanıza gönderilen etkinlik türlerine örnek olarak şunlar verilebilir:
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
-
https://schemas.openid.net/secevent/oauth/event-type/token-revoked
-
https://schemas.openid.net/secevent/risc/event-type/account-disabled
Hesaplar Arası Koruma'nın nasıl uygulanacağı ve mevcut etkinliklerin tam listesi hakkında daha fazla bilgi için Hesaplar Arası Koruma ile kullanıcı hesaplarını koruma sayfasına bakabilirsiniz.