Loopback IP Adresi akışı Taşıma Kılavuzu

Genel bakış

16 Şubat 2022'de, daha güvenli OAuth akışları kullanarak Google OAuth etkileşimlerini daha güvenli hale getirmeyi planladığımızı duyurmuştuk. Bu kılavuz, geri döngü IP adresi akışından desteklenen alternatiflere başarıyla geçiş yapmak için gerekli değişiklikleri ve adımları anlamanıza yardımcı olur.

Bu önlem, Google'ın OAuth 2.0 yetkilendirme uç noktalarıyla etkileşimler sırasında kimlik avı ve uygulama kimliğine bürünme saldırılarına karşı koruyucu bir önlemdir.

Loopback IP Adresi akışı nedir?

Geri döngü IP adresi akışı, kullanıcı OAuth izin isteğini onayladıktan sonra kimlik bilgilerinin gönderildiği yönlendirme URI'sinin ana makine bileşeni olarak localhost veya IP adresi kullanımını destekler. Bu akış, bazı işletim sistemlerinde aynı geri döngü arayüzüne erişen kötü amaçlı bir uygulamanın, yetkilendirme sunucusundan verilen yönlendirme URI'sine yanıtı engelleyebileceği ve yetkilendirme koduna erişim elde edebileceği ortadaki adam saldırılarına karşı savunmasızdır.

Geri döngü IP adresi akışı; yerel iOS, Android ve Chrome OAuth istemci türleri için kullanımdan kaldırılmaktadır ancak masaüstü uygulamalarında desteklenmeye devam edecektir.

Önemli uygunluk tarihleri

  • 14 Mart 2022 - Yeni OAuth istemcilerinin Loopback IP adresi akışını kullanması engellendi
  • 1 Ağustos 2022: Uyumlu olmayan OAuth isteklerine kullanıcılara bir uyarı mesajı gösterilebilir
  • 31 Ağustos 2022 - 14 Mart 2022'den önce oluşturulan yerel Android, Chrome uygulaması ve iOS OAuth istemcileri için Loopback IP adresi akışı engellendi
  • 21 Ekim 2022: Mevcut tüm müşteriler engellendi (muaf tutulan müşteriler dahil)

Uyumlu olmayan istekler için kullanıcılara bir hata mesajı gösterilir. Bu mesaj, Google API Konsolu'ndaki OAuth izin ekranında kaydettiğiniz destek e-postasını gösterirken kullanıcılara uygulamanın engellendiğini bildirir.

Taşıma sürecini tamamlamak için tamamlanması gereken iki temel adım vardır:
  1. Bu durumdan etkilenip etkilenmediğinizi belirleyin.
  2. Bu sorundan etkileniyorsanız desteklenen bir alternatife geçin.

Bu durumdan etkilenip etkilenmediğinizi belirleyin

OAuth istemci kimliği türünüzü inceleyin

Google API Console öğesinin Credentials page öğesine gidin ve OAuth 2.0 İstemci Kimlikleri bölümünün altında OAuth istemci kimliği türünüzü görüntüleyin. Şunlardan biri olabilir: Web uygulaması, Android, iOS, Evrensel Windows Platformu (UWP), Chrome uygulaması, TV'ler ve Sınırlı Giriş cihazları, Masaüstü uygulaması.

İstemci türünüz Android, Chrome uygulaması veya iOS ise ve geri döngü IP adresi akışını kullanıyorsanız sonraki adıma geçin.

Masaüstü uygulaması OAuth istemcisinde geri döngü IP adresi akışını kullanıyorsanız söz konusu OAuth istemci türüyle kullanım desteklenmeye devam edeceğinden bu desteğin sonlandırılmasıyla ilgili herhangi bir işlem yapmanız gerekmez.

Uygulamanızın geri döngü IP adresi akışını kullanıp kullanmadığını belirleme

Uygulamanızın yaptığı Google OAuth yetkilendirme isteğinin geri dönüş yönlendirme URI değerlerini kullanıp kullanmadığını belirlemek için uygulama kodunuzu veya giden ağ çağrısını (uygulamanız OAuth kitaplığı kullanıyorsa) inceleyin.

Uygulama kodunuzu inceleyin

Uygulama kodunuzun Google OAuth yetkilendirme uç noktalarına çağrı yaptığınız bölümünü inceleyin ve redirect_uri parametresinin aşağıdaki değerlerden herhangi birine sahip olup olmadığını belirleyin:
  • redirect_uri=http://127.0.0.1:<port>, ör. redirect_uri=http://127.0.0.1:3000
  • redirect_uri=http://[::1]:<port>, ör. redirect_uri=http://[::1]:3000
  • redirect_uri=http://localhost:<port>, ör. redirect_uri=http://localhost:3000
Örnek bir geri dönüş IP adresi yönlendirme akış isteği aşağıdaki gibi görünür:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

Giden ağ çağrısını denetle

Ağ çağrılarını inceleme yöntemi, uygulama istemcisi türünüze bağlı olarak değişir.
Ağ çağrılarını incelerken Google OAuth yetkilendirme uç noktalarına gönderilen istekleri arayın ve redirect_uri parametresinin aşağıdaki değerlerden herhangi birine sahip olup olmadığını belirleyin:
  • redirect_uri=http://127.0.0.1:<port>, ör. redirect_uri=http://127.0.0.1:3000
  • redirect_uri=http://[::1]:<port>, ör. redirect_uri=http://[::1]:3000
  • redirect_uri=http://localhost:<port>, ör. redirect_uri=http://localhost:3000
Örnek bir geri dönüş IP adresi yönlendirme akışı isteği, aşağıdaki gibi görünür:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

Desteklenen bir alternatife geçiş yapın

Mobil İstemciler (Android / iOS)

Uygulamanızın Android veya iOS OAuth istemci türünde geri döngü IP adresi akışını kullandığını belirlerseniz Google ile Oturum Açma mobil SDK'larımızı (Android, iOS) kullanmaya geçmeniz gerekir.

SDK, Google API'lerine erişimi kolaylaştırır ve Google'ın OAuth 2.0 yetkilendirme uç noktalarına yapılan tüm çağrıları işler.

Aşağıdaki belge bağlantıları, geri dönüş IP adresi yönlendirme URI'si kullanmadan Google API'lerine erişmek için Google ile Oturum Açma SDK'larının nasıl kullanılacağı hakkında bilgi sağlar.

Android'de Google API'lerine erişme

Sunucu Tarafı (çevrimdışı) erişim
Aşağıdaki örnekte, Android'de sunucu tarafındaki Google API'lerine nasıl erişileceği gösterilmektedir.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
  GoogleSignInAccount account = task.getResult(ApiException.class);
  
  // request a one-time authorization code that your server exchanges for an
  // access token and sometimes refresh token
  String authCode = account.getServerAuthCode();
  
  // Show signed-in UI
  updateUI(account);

  // TODO(developer): send code to server and exchange for access/refresh/ID tokens
} catch (ApiException e) {
  Log.w(TAG, "Sign-in failed", e);
  updateUI(null);
}

Sunucu tarafında Google API'lerine nasıl erişeceğinizi öğrenmek için sunucu tarafı erişim kılavuzunu inceleyin.

iOS Uygulamasında Google API'lerine Erişme

İstemci tarafı erişim

Aşağıdaki örnekte, iOS'te istemci tarafında Google API'lerine nasıl erişileceği gösterilmektedir.

user.authentication.do { authentication, error in
  guard error == nil else { return }
  guard let authentication = authentication else { return }
  
  // Get the access token to attach it to a REST or gRPC request.
  let accessToken = authentication.accessToken
  
  // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
  // use with GTMAppAuth and the Google APIs client library.
  let authorizer = authentication.fetcherAuthorizer()
}

Erişim jetonunu, REST veya gRPC isteğinin başlığına (Authorization: Bearer ACCESS_TOKEN) ekleyerek ya da REST için Objective-C için Google API'leri istemci kitaplığıyla birlikte alıcı yetkilendiriciyi (GTMFetcherAuthorizationProtocol) kullanarak API'yi çağırmak için erişim jetonunu kullanın.

İstemci tarafındaki Google API'lerine nasıl erişeceğinizi öğrenmek için istemci tarafı erişim kılavuzunu inceleyin. Google API'larına erişme hakkında daha fazla bilgi edinin.

Sunucu tarafı (çevrimdışı) erişim
Aşağıdaki örnekte, bir iOS istemcisini desteklemek için sunucu tarafındaki Google API'lerine nasıl erişileceği gösterilmektedir.
GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in
  guard error == nil else { return }
  guard let user = user else { return }
  
  // request a one-time authorization code that your server exchanges for
  // an access token and refresh token
  let authCode = user.serverAuthCode
}

Sunucu tarafında Google API'lerine nasıl erişeceğinizi öğrenmek için sunucu tarafı erişim kılavuzunu inceleyin.

Chrome Uygulama İstemcisi

Uygulamanızın Chrome uygulama istemcisinde geri döngü IP adresi akışını kullandığını belirlerseniz Chrome Identity API'yi kullanmaya geçmeniz gerekir.

Aşağıdaki örnekte, geri döngü IP adresi yönlendirme URI'sı kullanılmadan tüm kullanıcı kişilerinin nasıl alınacağı gösterilmektedir.

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {

  
  // retrieve access token
  chrome.identity.getAuthToken({interactive: true}, function(token) {
  
  // ..........


  // the example below shows how to use a retrieved access token with an appropriate scope
  // to call the Google People API contactGroups.get endpoint

  fetch(
    'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY',
    init)
    .then((response) => response.json())
    .then(function(data) {
      console.log(data)
    });
   });
 });
};

Kullanıcıların kimliğini doğrulama ve Chrome Identity API ile Google uç noktalarını çağırma hakkında daha fazla bilgi edinmek için Chrome Identity API kılavuzunu inceleyin.