Grup Dışı (OOB) Akış Taşıma Kılavuzu

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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, OAuth bant dışı (OOB) akışından desteklenen alternatiflere başarılı bir şekilde geçiş için gereken değişiklikleri ve adımları anlamanıza yardımcı olur.

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

OOB nedir?

Manuel kopyalama/yapıştırma seçeneği olarak da adlandırılan OAuth bant dışı (OOB), eski bir destek akışıdır. Kullanıcı, OAuth izin isteğini onayladıktan sonra kimlik bilgilerini kabul etmek için yönlendirme URI'sine sahip olmayan yerel istemcileri destekleyecek şekilde tasarlanmıştır. OOB akışı, uzaktan kimlik avı riski oluşturur ve müşterilerin bu güvenlik açığına karşı korunmak için alternatif bir yönteme geçmesi gerekir.

OOB akışı, tüm istemci türleri (Web uygulamaları, Android, iOS, Universal Windows Platformu (UWP), Chrome uygulamaları, TV'ler ve sınırlı girişli cihazlar, Masaüstü uygulamaları) için kullanımdan kaldırılıyor.

Önemli uygunluk tarihleri

  • 28 Şubat 2022 - OOB akışı için yeni OAuth kullanımı engellendi
  • 5 Eylül 2022: uyumlu olmayan OAuth isteklerinde kullanıcıya yönelik bir uyarı mesajı gösterilebilir
  • 3 Ekim 2022 - OOB akışı, 28 Şubat 2022'den önce oluşturulan OAuth istemcileri için kullanımdan kaldırılmıştır

Politikaya uygun olmayan istekler için bir ay önce (ör.5 Eylül 2022) kullanıcıya yönelik bir uyarı mesajı gösterilebilir. OOB akışı tamamen kullanımdan kaldırılır. Mesajda, Google API Konsolu'ndaki OAuth izin ekranında kaydettiğiniz destek e-postası gösterilirken kullanıcılara uygulamanın yakında engellenebileceği bildirilir.

Kullanıcıya gösterilen uyarı mesajını onaylayabilir ve yetkilendirme çağrısında aşağıda gösterildiği gibi bir sorgu parametresi ileterek mesajı gizleyebilirsiniz:
  • Uygulamanızda Google' OAuth 2.0 Yetkilendirme Uç Noktasına istek gönderdiğiniz koda gidin.
  • Yönlendirme akışı isteğinize yaptırım tarihi: 2022-10-03 değerini içeren bir ack_oob_shutdown parametresi ekleyin. Örnek:
    ack_oob_shutdown=2022-10-03
Taşıma işlemini tamamlamak için iki ana adım vardır:
  1. Etkilenip etkilenmediğinizi belirleyin.
  2. Bu sorundan etkileniyorsanız daha güvenli bir alternatife geçin.

Etkilenip etkilenmediğinizi belirleyin

Bu kullanımdan kaldırma yalnızca üretim uygulamaları (yani yayınlama durumu Üretimde olarak ayarlanmış uygulamalar) için geçerlidir. Akış, Test yayınlama durumuna sahip uygulamalar için çalışmaya devam edecektir.

OAuth'ta Consent Screen pageyayınlama durumunuzu inceleyin ve bir üretim aşamasında OOB akışını "Üretim" durumunda olacak şekilde kullanıyorsanız sonraki adıma geçin.

Uygulamanızın OOB akışını kullanıp kullanmadığını nasıl belirleyebilirsiniz?

Uygulamanızın gönderdiği Google OAuth yetki isteğinin OOB yönlendirme URI'si değeri kullanıp kullanmadığını belirlemek için uygulama kodunuzu veya giden ağ çağrısını (uygulamanızın OAuth kitaplığı kullanması durumunda) inceleyin.

Uygulama kodunuzu inceleme

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=urn:ietf:wg:oauth:2.0:oob
  • redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto
  • redirect_uri=oob
Örnek bir OOB yönlendirme akışı isteği aşağıdaki gibi görünür:
https://accounts.google.com/o/oauth2/v2/auth?
response_type=code&
scope=<SCOPES>&
state=<STATE>&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
client_id=<CLIENT_ID>

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

Ağ çağrılarını inceleme yöntemi, uygulamanızın istemci türüne bağlı olarak değişiklik gösterir.
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=urn:ietf:wg:oauth:2.0:oob
  • redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto
  • redirect_uri=oob
Örnek bir OOB yönlendirme akışı isteği aşağıdaki gibi görünür:
https://accounts.google.com/o/oauth2/v2/auth?
response_type=code&
scope=<SCOPES>&
state=<STATE>&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
client_id=<CLIENT_ID>

Güvenli bir alternatife geçiş yapın

Mobil İstemciler (Android / iOS)

Uygulamanızın OOB akışını bir Android veya iOS OAuth istemci türüyle kullandığını tespit ederseniz 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.

Dokümantasyon bağlantıları, OOB 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 verir.

Android'de Google API'lerine erişme

Sunucu Tarafı (çevrimdışı) erişim
Aşağıdaki örnekte, Android'de sunucu tarafında 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);
}

Google API'lere sunucu tarafında nasıl erişileceğiyle ilgili sunucu tarafı erişim kılavuzunu inceleyin.

iOS Uygulamasında Google API'lerine Erişme

İstemci tarafı erişimi

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 gTB isteğinin (Authorization: Bearer ACCESS_TOKEN) başlığına ekleyerek ya da REST için Objective-C için Google API'leri istemci kitaplığıyla alıcı yetkilendirmeyi (GTMFetcherAuthorizationProtocol) kullanarak erişim jetonunu kullanarak API'yi çağırın.

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

Sunucu tarafı (çevrimdışı) erişim
Aşağıdaki örnekte, bir iOS istemcisini desteklemek için sunucu tarafında 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
}

Google API'lere sunucu tarafında nasıl erişileceğine dair sunucu tarafı erişim kılavuzunu inceleyin.

Chrome Uygulama İstemcisi

Uygulamanızın Chrome uygulama istemcisinde OOB akışını kullandığını belirlerseniz Chrome Identity API'ye geçmeniz gerekir.

Aşağıdaki örnekte, bir OOB yönlendirme URI'si 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)
    });
   });
 });
};

Kimlik doğrulama kullanıcılarına erişme ve Google uç noktalarını Chrome Identity API ile çağırma hakkında daha fazla bilgi edinmek için Chrome Identity API kılavuzunu inceleyin.

Web Uygulaması

Uygulamanızın bir web uygulaması için OOB akışını kullandığını belirlerseniz Google API istemci kitaplıklarımızdan birini kullanmaya geçmeniz gerekir. Farklı programlama dilleri için istemci kitaplıkları burada listelenmiştir.

Kitaplıklar, Google API'lerine erişimi ve Google uç noktalarına yapılan tüm çağrıları yönetmeyi kolaylaştırır.

Sunucu tarafı (çevrimdışı) erişim
Sunucu tarafı (çevrimdışı) erişim modu aşağıdakileri yapmanızı gerektirir:

Aşağıdaki kod snippet'i, bir kullanıcının Google Drive dosyalarını OOB yönlendirme URI'si kullanmadan sunucu tarafında listelemek için Google Drive API'sini kullanma hakkındaki bir NodeJS örneği gösterir.

async function main() {
  const server = http.createServer(async function (req, res) {

  if (req.url.startsWith('/oauth2callback')) {
    let q = url.parse(req.url, true).query;

    if (q.error) {
      console.log('Error:' + q.error);
    } else {
      
      // Get access and refresh tokens (if access_type is offline)
      let { tokens } = await oauth2Client.getToken(q.code);
      oauth2Client.setCredentials(tokens);

      // Example of using Google Drive API to list filenames in user's Drive.
      const drive = google.drive('v3');
      drive.files.list({
        auth: oauth2Client,
        pageSize: 10,
        fields: 'nextPageToken, files(id, name)',
      }, (err1, res1) => {
        // TODO(developer): Handle response / error.
      });
    }
  }
}

Google API'lere sunucu tarafında nasıl erişeceğinizi öğrenmek için sunucu tarafı web uygulaması kılavuzunu inceleyin.

İstemci tarafı erişimi

JavaScript'teki aşağıdaki kod snippet'i, istemci tarafında kullanıcının takvim etkinliklerine erişmek için Google API'nin kullanıldığı bir örneği gösterir.


// initTokenClient() initializes a new token client with your
// web app's client ID and the scope you need access to

const client = google.accounts.oauth2.initTokenClient({
  client_id: 'YOUR_GOOGLE_CLIENT_ID',
  scope: 'https://www.googleapis.com/auth/calendar.readonly',
  
  // callback function to handle the token response
  callback: (tokenResponse) => {
    if (tokenResponse && tokenResponse.access_token) { 
      gapi.client.setApiKey('YOUR_API_KEY');
      gapi.client.load('calendar', 'v3', listUpcomingEvents);
    }
  },
});

function listUpcomingEvents() {
  gapi.client.calendar.events.list(...);
}

İstemci taraflı Google API'lerine nasıl erişeceğinizi öğrenmek için istemci tarafı web uygulaması kılavuzunu inceleyin.

Masaüstü istemcisi

Uygulamanızın bir masaüstü istemcisinde OOB akışını kullandığını belirlerseniz geri döngü IP adresi (localhost veya 127.0.0.1) akışını kullanmaya geçmeniz gerekir.