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

.

Bu dokümanda, telefon, tablet ve bilgisayar gibi cihazlara yüklenen uygulamaların Google'ın OAuth 2.0 uç noktalarını kullanarak Google API'leri

OAuth 2.0, kullanıcıların belirli verileri bir uygulamayla paylaşmasına olanak tanırken kullanıcı adlarını, şifreleri ve diğer bilgileri gizli tutabilirsiniz. Örneğin, bir uygulama OAuth 2.0'ı kullanarak şuradan izin alabilir: kullanıcıların Google Drive'larında dosya depolamasına izin verir.

Yüklü uygulamalar ayrı ayrı cihazlara dağıtılır ve bu uygulamaların farklı cihazlarda olduğu varsayılır sır tutamaz. Google API'lerine kullanıcı uygulamadayken veya Uygulama arka planda çalışıyor demektir.

Bu yetkilendirme akışı, web sunucusu uygulamaları için de geçerlidir. Aralarındaki temel fark yüklü uygulamaların sistem tarayıcısını açması ve işlenecek bir yerel yönlendirme URI'si sağlaması gerekir Google'ın yetkilendirme sunucusundan alınan yanıtları.

Alternatifler

Mobil uygulamalarda Google ile Oturum Açma'yı şunun için kullanmayı tercih edebilirsiniz: Android veya iOS Google ile Oturum Açma İstemci kitaplıkları, kimlik doğrulamayı ve kullanıcı yetkilendirmesini yürütür ve aşağıda açıklanan alt düzey protokolden daha hızlı uygulanır.

Sistem tarayıcısını desteklemeyen veya sınırlı girişe sahip cihazlarda çalışan uygulamalar için kameralar veya yazıcılar gibi farklı cihaz ve özelliklerde TV'ler ve Cihazlar veya TV'lerde ve Sınırlı Giriş Cihazlarında oturum açın.

Kitaplıklar ve örnekler

OAuth 2.0 akışını uygulamanıza yardımcı olması için aşağıdaki kitaplıkları ve örnekleri öneririz aşağıda açıklanmıştır:

Ön koşullar

Projeniz için API'leri etkinleştirin

Google API'lerini çağıran herhangi bir uygulamanın, bu API'ları API Console

Projenizde bir API'yi etkinleştirmek için:

  1. Open the API Library Google API Console.
  2. If prompted, select a project, or create a new one.
  3. API Library , mevcut tüm API'leri ürüne göre gruplandırılmış olarak listeler. ve ne kadar popüler olduğunu öğreneceğiz. Etkinleştirmek istediğiniz API listede görünmüyorsa aramayı kullanarak öğesini bulabilir veya ait olduğu ürün ailesinde Tümünü Göster'i tıklayabilirsiniz.
  4. Etkinleştirmek istediğiniz API'yi seçin ve Etkinleştir düğmesini tıklayın.
  5. If prompted, enable billing.
  6. If prompted, read and accept the API's Terms of Service.

Yetkilendirme kimlik bilgileri oluşturma

Google API'lerine erişmek için OAuth 2.0 kullanan tüm uygulamaların yetkilendirme kimlik bilgilerine sahip olması gerekir kimliği tanımlayabileceksiniz. Aşağıdaki adımlarda, projenizin kimlik bilgilerini oluşturmalarını sağlar. Böylece uygulamalarınız kimlik bilgilerini kullanarak API'lere erişebilir bilgileri görürsünüz.

  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 kullandığı istemci türleri ve yönlendirme yetkilendirme sunucusunun desteklediğini gösterir. İşletmeniz için önerilen istemci türünü seçin OAuth istemcinizi adlandırın ve formdaki diğer alanları aşağıdaki şekilde ayarlayın: uygun olmalıdır.
Android
  1. Android uygulama türünü seçin.
  2. OAuth istemcisi için bir ad girin. Bu ad, projenizin Credentials page değerlendirmelisiniz.
  3. Android uygulamanızın paket adını girin. Bu değer, <manifest> öğesinin package özelliği inceleyebilirsiniz.
  4. Uygulama dağıtımının SHA-1 imza sertifikası parmak izini girin.
    • Uygulamanızda Google Play'den uygulama imzalama için, SHA-1'i kopyalayın. parmak iziniz var.
    • Kendi anahtar deponuzu ve imzalama anahtarlarınızı yönetiyorsanız keytool yardımcı programını kullanın sertifika bilgilerini okunabilir bir biçimde yazdırmak için Java'ya dahil edilmiştir. Kopyala SHA1 değeri için Certificate fingerprints keytool çıkışını kullanır. Görüntüleyin İstemcinizin Kimliklerini Doğrulama Android için Google API'leri dokümanlarında bulabilirsiniz.
  5. (İsteğe bağlı) Android cihazınızın sahipliğini doğrulayın bir uygulamadır.
  6. 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 projenizin Credentials page değerlendirmelisiniz.
  3. Uygulamanızın paket tanımlayıcısını girin. Paket kimliği, CFBundleIdentifier anahtarı uygulamanızın bilgi özellik listesi kaynak dosyasına (info.plist) ekleyebilirsiniz. Değer Genel bölmesinde veya İmzalama ve Özellikler bölmesi Xcode proje düzenleyicisi. Paket kimliği, uygulamanın Uygulama Bilgileri sayfası Apple'ın App Store Connect sitesi.
  4. (İsteğe bağlı)

    Uygulamanız Apple'ın App Store'unda yayınlanıyorsa uygulamanızın App Store kimliğini girin. Mağaza Kimliği: Her Apple App Store URL'sine eklenen sayısal bir dizedir.

    1. Şunu açın: Apple App Store uygulaması iOS veya iPadOS cihazınızda.
    2. Uygulamanızı arayın.
    3. Paylaş düğmesini (kare ve yukarı ok simgesi) seçin.
    4. Bağlantıyı Kopyala'yı seçin.
    5. Bağlantıyı bir metin düzenleyiciye yapıştırın. App Store kimliği, URL'nin son kısmıdır.

      Örnek: https://apps.apple.com/app/google/id284815942

  5. (İsteğe bağlı)

    Ekip kimliğinizi girin. Görüntüleyin Ekip kimliğinizi bulma Daha fazla bilgi için Apple Geliştirici Hesabı belgelerini inceleyin.

  6. Oluştur'u tıklayın.
UWP
  1. Evrensel Windows Platformu uygulama türünü seçin.
  2. OAuth istemcisi için bir ad girin. Bu ad projenizin Credentials page değerlendirmelisiniz.
  3. Uygulamanızın 12 karakterli Microsoft Store kimliğini girin. Bu değeri, Microsoft İş Ortağı Merkezi uygulamasında Uygulama kimliği sayfasını ziyaret edin.
  4. Oluştur'u 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 olarak tanımlanmış bir şema kullanan bir derin bağlantı biçimidir.

ziyaret edin. Android'de özel URI şemaları kullanmaya alternatif

Şunu kullanın: Android SDK'sı için Google ile Oturum Açma Böylece, OAuth 2.0 yanıtını doğrudan uygulamanıza dağıtarak yönlendirme URI'si.

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

Şu anda Android'de OAuth entegrasyonunuz için özel bir şema kullanıyorsanız şunları yapmanız gerekir: önerilen Google ile Oturum Açma hizmetine tam geçiş yapmak için aşağıdaki işlemleri tamamlayın: Android SDK'sı:

  1. Kodunuzu, Google ile Oturum Açma SDK'sını kullanacak şekilde güncelleyin.
  2. Google API Konsolu'nda özel şema desteğini devre dışı bırakın.
ziyaret edin.

Google ile Oturum Açma Android SDK'sına geçiş yapmak için aşağıdaki adımları uygulayın:

  1. Google ile Oturum Açma Android SDK'sını kullanmak için kodunuzu güncelleyin:
    1. Nerede olduğunuzu belirlemek için kodunuzu inceleyin Google'ın OAuth 2.0 sunucusuna bir istek göndererek; özel bir şema kullanıyorsanız isteğiniz aşağıdaki gibi olacaktı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 örneğe bakın. Bkz. Biçim hakkında daha fazla bilgi için redirect_uri parametre tanımı ait olduğunu varsayalım.
    2. Aşağıdaki koşulları karşılayan scope ve client_id istek parametrelerini not edin: Google ile Oturum Açma SDK'sını yapılandırmanız gerekir.
    3. Şunu izleyin: Google ile Oturum Açma özelliğini Android uygulamanıza entegre etmeye başlayın talimatları uygulayın. Bu Arka uç sunucunuzun OAuth 2.0 istemci kimliğini yeniden kullanacağınız şekilde alın. önceki adımdan aldığınız client_id.
    4. Şunu izleyin: Sunucu Tarafı API erişimini etkinleştirme bakın. Aşağıdaki adımlar bu kapsamdadır:
      1. getServerAuthCode yöntemini kullanarak kapsamları da belirleyebilirsiniz.
      2. Erişim için kullanmak üzere yetkilendirme kodunu uygulamanızın arka ucuna gönderin ve yenile jeton.
      3. Kullanıcı adına Google API'lerine çağrı yapmak için alınan erişim jetonunu kullanın.
      ziyaret edin.
  2. Google API Konsolu'nda özel şema desteğini devre dışı bırakın:
    1. Şuraya gidin: OAuth 2.0 kimlik bilgileri Android istemcinizi seçin.
    2. Gelişmiş Ayarlar bölümüne gidin, Özel URI Şeması'nı etkinleştir onay kutusunu işaretleyip Kaydet'i tıklayın. özel URI şeması desteğini devre dışı bırakın.
Özel URI şeması etkinleştiriliyor
Önerilen alternatif işe yaramazsa uygulamanız için özel URI şemalarını etkinleştirebilirsiniz Android istemcisi için şu talimatları uygulayın:
  1. Şuraya gidin: OAuth 2.0 kimlik bilgileri listesi ve Android istemcinizi seçin.
  2. Gelişmiş Ayarlar bölümüne gidin, Özel URI Şeması'nı etkinleştir onay kutusunu işaretleyin ve etkinleştirmek için Kaydet'i tıklayın. özel URI şema desteği.
ziyaret edin. Chrome uygulamalarında özel URI şemaları kullanmaya alternatif

Şunu kullanın: Chrome Identity API Böylece, OAuth 2.0 yanıtını doğrudan uygulamanıza dağıtarak yönlendirme URI'si.

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

Doğrulama sürecini tamamlamak için Google Play Geliştirici Hesabınızı kullanabilirsiniz varsa ve uygulamanız Google Play Console. Aşağıdakiler tüm şartların karşılanması gerekir:

  • Google Play Console'da paket adını ve SHA-1 imza sertifikası dijital parmak izini kullanın, böylece Android OAuth istemcisi doğrulama işlemini tamamlayın.
  • Şurada uygulama için Yönetici iznine sahip olmanız gerekir: Google Play Console Daha fazla bilgi 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 Sahipliği Doğrula düğmesini tıklayarak doğrulama işlemini tamamlayın.

Doğrulama başarılı olursa işlemin başarılı olduğunu onaylamak için bir bildirim gösterilir sürecine göz atalım. Aksi takdirde bir hata istemi gösterilir.

Başarısız doğrulama sorununu gidermek için lütfen aşağıdakileri deneyin:

  • Doğruladığınız uygulamanın Google Play Console'da kayıtlı bir uygulama olduğundan emin olun.
  • Şurada uygulama için Yönetici iznine sahip olduğunuzdan emin olun: Google Play Console
Chrome

Doğrulama sürecini tamamlamak için Chrome Web Mağazası Geliştirici hesabınızı kullanırsınız. Doğrulama işleminin başarılı olması için aşağıdaki koşulların karşılanması gerekir:

  • Chrome Web Mağazası Geliştirici Kontrol Paneli tamamladığınız Chrome Uzantısı OAuth istemcisiyle aynı öğe kimliğine sahip olmalıdır doğrulama işleminden geçiyor.
  • Chrome Web Mağazası öğesi için bir yayıncı olmanız gerekir. Daha fazla bilgi erişim yönetimi hakkında daha fazla bilgiyi Chrome Web Mağazası Geliştirici Kontrol Paneli'nde bulabilirsiniz.

Chrome Uzantı 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: Doğrulama işlemini tamamlamadan önce lütfen birkaç dakika bekleyin: hesabınıza erişim izni verebilirsiniz.

Doğrulama başarılı olursa işlemin başarılı olduğunu onaylamak için bir bildirim gösterilir sürecine göz atalım. Aksi takdirde bir hata istemi gösterilir.

Başarısız doğrulama sorununu gidermek için lütfen aşağıdakileri deneyin:

  • Chrome Web Mağazası Geliştirici Kontrol Paneli'nde doğrulama işlemini tamamladığınız Chrome Uzantısı OAuth istemcisiyle aynı öğe kimliği.
  • Uygulamanın yayıncısı olduğunuzdan, yani bağımsız yayıncı olduğunuzdan emin olun. veya uygulamanın grup yayıncısının bir üyesi olabilir. Daha fazla bilgi erişim yönetimi hakkında daha fazla bilgiyi Chrome Web Mağazası Geliştirici Kontrol Paneli'nde bulabilirsiniz.
  • Grup yayıncı listenizi yeni güncellediyseniz grup yayıncı üyeliğinin mevcut olduğunu listesi, Chrome Web Mağazası Geliştirici Kontrol Paneli'nde senkronize edilir. Daha fazla bilgi yayıncı üyelik listenizi senkronize etme hakkında.

Geri Döngü IP adresi (macOS, Linux, Windows masaüstü)

Yetkilendirme kodunu bu URL'yi kullanarak almak için uygulamanızın yerel web sunucusu. 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ını aldığında, en iyi kullanılabilirlik için şuna göre yanıt vermelidir: kullanıcıya tarayıcıyı kapatıp uygulamanıza dönmesini söyleyen bir HTML sayfası görüntüleme.

Önerilen kullanım macOS, Linux ve Windows masaüstü (Universal Windows Platform 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ı tanımlama

Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim istemesini sağlarken aynı zamanda da Böylece kullanıcılar, uygulamanıza izin verdikleri erişim miktarını kontrol edebilir. Böylece, talep edilen kapsamların sayısı ile gerçekleşme olasılığı arasında ters bir ilişki Kullanıcı izni alma.

OAuth 2.0 yetkilendirmesini uygulamaya başlamadan önce kapsamları tanımlamanızı öneririz. uygulamanızın erişim izni olması gerekir.

OAuth 2.0 API Kapsamları dokümanı, Google API'lerine erişmek için kullanabileceğiniz kapsamların listesini görebilirsiniz.

OAuth 2.0 erişim jetonları alma

Aşağıdaki adımlarda uygulamanızın, Google OAuth 2.0 sunucusuyla nasıl etkileşimde bulunduğunu Kullanıcı adına API isteği gerçekleştirmek için kullanıcının izni. Uygulamanızda bu özellik bulunmalıdır kullanıcı yetkilendirmesi gerektiren bir Google API isteğini yürütmeden önce izin vermesi gerekir.

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

Google, Code Exchange için Kanıt Anahtarı'nı destekler. (PKCE) protokolünü kullanıma sunduk. Her müşteri için benzersiz bir kod doğrulayıcı oluşturulur. yetkilendirme isteği ve bunun "code_challenge" adlı dönüştürülmüş değeri, yetkilendirme sunucusuna gidin.

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

code_verifier, ayrılmamış karakterler [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", en az 43 karakter uzunluğunda ve maksimum 128 karakter uzunluğunda olmalıdır.

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

Kod sorgulamasını oluşturma

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

Kod Meydan Okuması Oluşturma Yöntemleri
S256 (önerilir) Kod zorluğu, kodun Base64URL (dolgusuz) olarak kodlanmış SHA256 karmasıdır doğrulayıcı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 bir istek gönderin

Kullanıcı yetkilendirmesi almak için Google'ın yetkilendirme sunucusuna şu adresten bir istek gönderin: https://accounts.google.com/o/oauth2/v2/auth Bu uç nokta, etkin oturum aramalarını işler. kullanıcının kimliğini doğrular ve kullanıcının iznini alır. Uç noktaya yalnızca SSL üzerinden erişilebilir ve HTTP (SSL olmayan) bağlantıları reddeder.

Yetkilendirme sunucusu, şu yükleme işlemi için aşağıdaki sorgu dizesi parametrelerini destekler: uygulamalar:

Parametreler
client_id Zorunlu

Uygulamanızın istemci kimliği. Bu değeri API Console. Credentials page.

redirect_uri Zorunlu

Google'ın yetkilendirme sunucusunun uygulamanıza nasıl yanıt göndereceğini belirler. Her biri 100'den az gösterim alan yüklü uygulamalar tarafından kullanılabilen çeşitli yönlendirme seçenekleri vardır ve Belirli bir yönlendirme yöntemiyle yetkilendirme kimlik bilgileri göz önünde bulundurun.

Değer, OAuth 2.0 için yetkili yönlendirme URI'lerinden biriyle tam olarak eşleşmelidir ve API Console. Credentials page. Bu değer izin verilmiş URI'da redirect_uri_mismatch hatası alırsınız.

Aşağıdaki tabloda, şunun için uygun redirect_uri parametre değeri gösterilmektedir: her yöntem:

redirect_uri değerleri
Özel URI şeması com.example.app:redirect_uri_path

veya

com.googleusercontent.apps.123:redirect_uri_path
  • com.example.app, sizin kontrolünüzdedir. Özel şemanın, geçerli olması için bir nokta içermesi gerekir.
  • com.googleusercontent.apps.123, girin.
  • redirect_uri_path, /oauth2redirect. Yolun tek bir eğik çizgi ile başlayan bir URL'dir. Bu, normal HTTP URL'lerinden farklıdır.
ziyaret edin.
Geri dönen IP adresi http://127.0.0.1:port veya http://[::1]:port

İlgili geri dönüş IP adresi için platformunuzu sorgulayın ve bir HTTP başlatın kullanılabilir bir bağlantı noktasından yararlanın. port yerine gerçek bağlantı noktası numarası olduğunu unutmayın.

Mobil cihazlarda geri döngü IP adresi yönlendirme seçeneği desteğinin uygulamaları KULLANIMDAN KALDIRILDI.

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

CEVAP boşlukla ayrılmış uygulamanızın erişebileceği kaynakları tanımlayan temsil eder. Bu değerler, Google'ın belirtir.

Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim istemesini sağlar aynı zamanda kullanıcıların, uygulamanıza erişebilecekleri erişim miktarını kontrol etmelerine de bir uygulamadır. Dolayısıyla, talep edilen kapsamların sayısı arasında ters bir ilişki vardır ve kullanıcının izin alma olasılığı bulunur.

code_challenge Önerilen

Sunucu tarafı olarak kullanılacak kodlanmış code_verifier öğesini belirtir sorgulama sırasında sorun. Görüntüleyin kod oluştur meydan okuma bölümüne bakın.

code_challenge_method Önerilen

Kullanılacak bir code_verifier öğesini kodlamak için hangi yöntemin kullanıldığını belirtir sırasında hata oluşur. Bu parametre, code_challenge parametresi için yukarıda açıklanmıştır. code_challenge_method değeri içeren istekte mevcut değilse varsayılan olarak plain değerine ayarlanır, code_challenge. Bu parametre için desteklenen değerler yalnızca şunlardır: S256 veya plain.

state Önerilen

Uygulamanızın, yetkilendirme sunucusunun yanıtıyla birlikte çalışır. Sunucu,name=value URL parçası tanımlayıcısı (#) redirect_uri, uygulamanızın erişim isteği.

Bu parametreyi, kullanıcıyı web sitesine yönlendirmek gibi çeşitli amaçlar için kullanabilirsiniz. uygulamanızda doğru kaynağı kullanma, nonce gönderme ve siteler arası isteği azaltma Sahtekarlık. redirect_uri metriğiniz tahmin edilebildiğinden state kullanılarak değeri, gelen bir bağlantının bir bağlantı durumu ya da kötü amaçlı yazılım Kimlik doğrulama isteği. Rastgele bir dize oluşturursanız veya bir çerezin karmasını ya da durumunu yakalayan başka bir değerle yanıtı doğrulayarak Ayrıca istek ve yanıtın aynı tarayıcıdan kaynaklandığından emin olun. gibi saldırılara karşı koruma sağlayarak siteler arası istek sahtecilik. Bkz. Keşif Bağlantısı state jetonunun nasıl oluşturulacağı ve onaylanacağıyla ilgili örnek dokümanları inceleyin.

login_hint İsteğe bağlı

Uygulamanız hangi kullanıcının kimlik doğrulaması yapmaya çalıştığını biliyorsa bu parametreyi kullanabilir Google Kimlik Doğrulama Sunucusu'na bir ipucu sağlamak için kullanılır. Sunucu, bu ipucunu oturum açma formundaki e-posta alanını önceden doldurarak veya uygun çoklu giriş oturumunu seçin.

Parametre değerini bir e-posta adresi veya sub tanımlayıcısına ayarlayın. kullanıcının Google Kimliğine eşdeğer olmalıdır.

Örnek yetkilendirme URL'leri

Aşağıdaki sekmeler, farklı yönlendirme URI'si seçenekleri için örnek yetkilendirme URL'lerini gösterir.

URL'ler, redirect_uri parametresinin değeri dışında aynı. URL'ler gerekli response_type ve client_id parametrelerini de içerir olarak tanımlar.state Her URL, okunabilirlik.

Ö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ğini belirler. Burada aşamasında, Google, uygulamanızın adını ve Google API'sini gösteren bir izin penceresi ve hizmetlerin kullanılabilmesi için gereken izinleri . İlgili içeriği oluşturmak için kullanılan daha sonra kullanıcı, uygulamanız tarafından istenen bir veya daha fazla kapsama erişim izni verebilir ya da isteği reddetmelidir.

Başvurunuzun sizden yanıt almayı beklediği için bu aşamada herhangi bir işlem yapması gerekmez. Google'ın, herhangi bir erişim izni verilip verilmediğini gösteren OAuth 2.0 sunucusu. Bu yanıtın açıklaması adım adım anlatacağız.

Hatalar

Google'ın OAuth 2.0 yetkilendirme uç noktasına gönderilen istekler, kullanıcılara yönelik hata mesajları gösterebilir. ile başlar. Sık karşılaşılan hata kodları ve önerilenler aşağıda listelenmiştir.

admin_policy_enforced

Google Hesabı, şu politikaları nedeniyle istenen bir veya daha fazla kapsamı yetkilendiremedi: Google Workspace yöneticilerine ulaşın. Google Workspace Yöneticisi yardım makalesine göz atın Hangi üçüncü taraf ve üçüncü taraf Dahili uygulamaların Google Workspace verilerine erişmesi veya bir yöneticinin tüm kapsamlara ya da hassas ve gizli erişim OAuth istemci kimliğinize açıkça erişim verilene kadar kısıtlanan kapsamları kısıtlamayın.

disallowed_useragent

Yetkilendirme uç noktası, Google'ın OAuth 2.0 Politikaları.

Android

Android geliştiricileri, android.webkit.WebView. Geliştiriciler bunun yerine Android için Google ile Oturum Açma veya COPPA Vakfı'nın Android için AppAuth

Bir Android uygulaması genel bir web bağlantısını açtığında, web geliştiricileri bu hatayla karşılaşabilir. Bir kullanıcı Google'ın OAuth 2.0 yetkilendirme uç noktasına tıkladığında, sitenizi ziyaret edin. Geliştiriciler, genel bağlantıların her iki türü de içeren işletim sistemi Android Uygulama Bağlantıları işleyicileri veya varsayılan tarayıcı uygulamasını kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan Android Özel Sekmeleri desteklenen bir seçenektir.

iOS

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

Web geliştiricileri, iOS veya macOS uygulaması Google'ın OAuth 2.0 yetkilendirme uç noktasına giden bir kullanıcı otomatik olarak sitenizi ziyaret edin. Geliştiriciler, genel bağlantıların her iki türü de içeren işletim sistemi Geçiş Bağlantıları işleyicileri veya varsayılan tarayıcı uygulamasını kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan SFSafariViewController desteklenen bir seçenektir.

org_internal

İstekteki OAuth istemci kimliği, belirli Google Cloud Kuruluşu. Bu yapılandırma seçeneği hakkında daha fazla bilgi için Kullanıcı türü "OAuth izin ekranınızı ayarlama başlıklı yardım makalesini inceleyebilirsiniz.

invalid_grant

Bir kod doğrulayıcı ve reCAPTCHA sorgulaması, code_callenge parametresi geçersiz veya eksiktir. Lütfen code_challenge parametresi doğru şekilde ayarlanmış.

Bir erişim jetonunu yenilerken jetonun süresi dolmuş veya jetonun üzerinde geçersiz kılınmıştır. Kullanıcının kimliğini tekrar doğrulayın ve yeni jetonlar almak için kullanıcıdan izin isteyin. Devam ediyorsanız görmek için uygulamanızın doğru yapılandırıldığından ve kullanarak istekte bulunabilirsiniz. Aksi takdirde, kullanıcı hesabında silinmiş veya devre dışı bırakılmış olabilir.

redirect_uri_mismatch

Yetkilendirme isteğinde iletilen redirect_uri, yetkili bir kuruluşla eşleşmiyor OAuth istemci kimliğinin yönlendirme URI'si. Şuradaki yetkili yönlendirme URI'lerini inceleyin: Google API Console Credentials page

İletilen redirect_uri, istemci türü için geçersiz olabilir.

redirect_uri parametresi, desteği sonlandırıldı ve artık desteklenmiyor. Daha fazla bilgi için taşıma rehberi inceleyebilirsiniz.

invalid_request

Talebinizle ilgili bir sorun oluştu. 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'unuzu doğrulayın entegrasyonun önerilen bir entegrasyon yöntemi kullanması
  • Yönlendirme URI'si için özel bir şema kullanılır : Hata mesajını görürseniz Chrome uygulamalarında veya Özel URI şeması desteklenmez Android istemciniz için etkinleştirilmemişse özel bir URI kullandığınız anlamına gelir. Chrome uygulamalarında desteklenmeyen ve varsayılan olarak devre dışı bırakılmış Android Özel URI şeması hakkında daha fazla bilgi edinin alternatifler

4. Adım: OAuth 2.0 sunucu yanıtını yönetin

Uygulamanızın yetkilendirme yanıtını alma şekli yönlendirme URI şeması seçin. Düzen ne olursa olsun yanıt bir yetkilendirme kodu (code) ya da hata içerecek (error). Örneğin, error=access_denied, kullanıcının adlı kullanıcı isteği reddetti.

Kullanıcı uygulamanıza erişim izni verirse yetkilendirme kodunu erişim jetonunu ve yenileme jetonunu sağlamanız gerekir.

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

Yetkilendirme kodunu erişim jetonuyla değiştirmek için https://oauth2.googleapis.com/token uç noktasını seçin ve şu parametreleri ayarlayın:

Alanlar
client_id API Consolearacından alınan istemci kimliği Credentials page.
client_secret API Consoleöğesinden alınan istemci gizli anahtarı Credentials page.
code İlk istekten döndürülen yetkilendirme kodu.
code_verifier Şurada oluşturduğunuz kod doğrulayıcı 1. Adım:
grant_type OAuth 2.0'da tanımlandığı gibi spesifikasyonu, bu alanın değeri authorization_code olarak ayarlanmalıdır.
redirect_uri API Console. Verilen süre için Credentials page client_id.

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 içeren bir JSON nesnesi döndürerek yanıt verir. jetonu ve yenileme jetonu bulunur.

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ğinizde bir kimlik kapsamı, openid, profile veya email gibi. Değer belirtir.
refresh_token Yeni bir erişim jetonu almak için kullanabileceğiniz jeton. Yenileme jetonları Kullanıcı erişimi iptal ederse. 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ı dizeler içerir.
token_type Döndürülen jetonun türü. Şu anda bu alanın değeri her zaman Bearer

Aşağıdaki snippet örnek bir yanıt gösterir:

{
  "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, bu jetonu kullanarak bir Google Belirli bir kullanıcı adına API kullanıcı hesabı(API'nin gerektirdiği erişim kapsamları verildiyse) ile birlikte çalışır. Bunu yapmak için API'ye yapılan bir istekte, access_token sorgusu ekleyerek erişim jetonunu parametresi veya Authorization HTTP başlığı Bearer değeri olabilir. Mümkünse HTTP üstbilgisi tercih edilir, çünkü sorgu dizeleri sunucu günlüklerinde görünür olma eğilimindedir. Çoğu zaman Google API'lerine yapılan çağrılarınızı ayarlamak için bir istemci kitaplığı kullanabilirsiniz (örneğin, Drive Files API'yi çağırma).

Tüm Google API'lerini deneyebilir ve kapsamlarını şuradan görüntüleyebilirsiniz: OAuth 2.0 Playground (OAuth 2.0 Oyun Alanı).

HTTP GET örnekleri

Bir drive.files Authorization: Bearer HTTP kullanan uç nokta (Drive Files API) başlık 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

Aşağıda, kimliği doğrulanmış kullanıcı için aynı API'ye access_token kullanılarak yapılan bir çağrı verilmiştir. sorgu dizesi parametresi:

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

curl örnek

Bu komutları curl komut satırı uygulamasıyla test edebilirsiniz. Bir HTTP üstbilgisi seçeneğini kullanan bir örnek (tercih edilen):

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

Alternatif olarak, sorgu dizesi parametre seçeneği şu şekildedir:

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

Erişim jetonunu yenileme

Erişim jetonlarının süresi belirli aralıklarla sona erer ve ilgili API isteği için geçersiz kimlik bilgileri haline gelir. Siz Kullanıcı izin istemeden erişim jetonunu yenileyebilir (kullanıcının mevcut değil) girmeniz gerekir.

Uygulamanız, erişim jetonunu yenilemek için HTTPS POST gönderir yetkilendirme sunucusuna (https://oauth2.googleapis.com/token) gönderdiğiniz istek üzerine aşağıdaki parametreleri içerir:

Alanlar
client_id API Consoleöğesinden alınan istemci kimliği.
client_secret API Consoleöğesinden alınan istemci gizli anahtarı. (client_secret, aşağıdaki şekilde kayıtlı müşterilerden gelen istekler için geçerli değildir: Android, iOS veya Chrome uygulamaları için geçerlidir.)
grant_type Farklı OAuth 2.0 spesifikasyonu, bu alanın değeri refresh_token olarak ayarlanmalıdır.
refresh_token Yetkilendirme kodu exchange'inden 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 bir örnek yanıt:

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

Verilecek yenileme jetonlarının sayısının sınırlı olduğunu unutmayın; başına bir sınır ve tüm istemcilerde her kullanıcı için ayrı ayrı düzenleyebilirsiniz. Yenileme jetonlarını kaydetmeniz gerekir uzun süreli depolama alanına sahip olacak ve geçerli kaldıkları sürece bunları kullanmaya devam edebileceksiniz. Uygulamanız çok fazla yenileme jetonu istiyorsa bu sınırlarla karşılaşabilir. Böyle bir durumda eski yenileme jetonları çalışmayı durduracak.

Jetonu iptal etme

Bazı durumlarda, bir kullanıcı bir uygulamaya verilen erişimi iptal etmek isteyebilir. Kullanıcı erişimi iptal edebilir adresini ziyaret ederek Hesap Ayarları. Bkz. Kaldır Üçüncü taraf sitelerin site veya uygulama erişimi bölümü ve hesabınıza erişimi olan uygulamalar destek dokümanına bakın.

Bir uygulamanın, kendisine verilen erişimi programlı olarak iptal etmesi de mümkündür. Programlı iptal etme, bir kullanıcının e-posta listesinden çıktığı, bir veya sonraki bir veya bir uygulamanın gerektirdiği API kaynakları önemli ölçüde değişmiştir. Başka bir deyişle, Kaldırma sürecinin bir bölümü, izinleri önceden sağlamak için bir API isteği içerebilir. kaldırılır.

Uygulamanız, bir jetonu programlı bir şekilde iptal etmek için https://oauth2.googleapis.com/revoke ve jetonu parametre olarak ekler:

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

Bu jeton bir erişim jetonu veya yenileme jetonu olabilir. Jeton bir erişim jetonuysa ve bir yenileme jetonu varsa yenileme jetonu da iptal edilir.

İptal işlemi başarıyla tamamlanırsa yanıtın HTTP durum kodu 200 Hata koşulları için 400 ile birlikte HTTP durum kodu döndürülür hata kodu içerir.

Ek Okumalar

The IETF Best Current Practice OAuth 2.0 for the Yerel Uygulamalar, burada belgelenen en iyi uygulamaların birçoğunu oluşturur.

Hesaplar Arası Korumayı Uygulama

Kullanıcılarınızın güvenliğini korumak için atmanız gereken ek bir adım Hesaplar Arası Google'ın Hesaplar Arası Koruma Hizmeti'ni kullanarak koruma. Bu hizmet sayesinde şunları yapabilirsiniz: uygulamanıza aşağıdaki konularda bilgi sağlayan güvenlik işlemi bildirimlerine abone olun: kullanıcı hesabında önemli değişiklikler yapabilir. Daha sonra bu bilgileri kullanarak karar verdiğinizden emin olun.

Google'ın Hesaplar Arası Koruma Hizmeti tarafından uygulamanıza gönderilen etkinlik türlerine örnek olarak aşağıdakiler 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

Bkz. Kullanıcı hesaplarını Hesaplar Arası Koruma ile koruma 'nı inceleyin. inceleyin.