TV ve Sınırlı Girişli Cihaz Uygulamaları için OAuth 2.0

Bu dokümanda, TV, oyun konsolu ve yazıcı gibi cihazlarda çalışan uygulamaları kullanarak Google API'lerine erişmek için OAuth 2.0 yetkilendirmesinin nasıl uygulanacağı açıklanmaktadır. Daha açık belirtmek gerekirse bu akış, tarayıcı erişimi olmayan veya giriş özellikleri sınırlı olan cihazlar için tasarlanmıştı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 TV uygulaması, Google Drive'da depolanan bir dosyayı seçme izni almak için OAuth 2.0'ı kullanabilir.

Bu akışı kullanan uygulamalar ayrı ayrı cihazlara dağıtıldığından, uygulamaların gizli anahtarları saklayamayacağı varsayılır. Kullanıcı uygulamadayken veya uygulama arka planda çalışırken Google API'lerine erişebilirler.

Alternatifler

Kullanıcıların yalnızca Google Hesapları ile oturum açmasını ve temel kullanıcı profili bilgilerini almak için JWT kimlik jetonunu kullanmasını istiyorsanız TV'lerde ve Sınırlı Giriş Cihazlarında Oturum Açma başlıklı makaleyi inceleyin.

Ön koşullar

Projeniz için API'leri etkinleştirme

Google API'lerini çağıran tüm uygulamaların, API Konsolu'nda bu API'leri etkinleştirmesi gerekir.

Projeniz için bir API'yi etkinleştirmek üzere:

  1. Google API Konsolu'nda API Kitaplığı'nı açın.
  2. İstenirse bir proje seçin veya yeni bir proje oluşturun.
  3. API Kitaplığı, mevcut tüm API'leri ürün ailesine ve popülerliğe göre gruplandırarak listeler. Etkinleştirmek istediğiniz API listede görünmüyorsa arama yaparak bulun veya ait olduğu ürün ailesinde Tümünü Görüntüle'yi tıklayın.
  4. Etkinleştirmek istediğiniz API'yi seçin, ardından Etkinleştir düğmesini tıklayın.
  5. İstenirse faturalandırmayı etkinleştirin.
  6. İstenirse API'nin Hizmet Şartları'nı okuyup kabul edin.

Yetkilendirme kimlik bilgileri oluşturma

Google API'lerine erişmek için OAuth 2.0 kullanan tüm uygulamaların, uygulamayı Google'ın OAuth 2.0 sunucusuna 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. Uygulamalarınız, söz konusu proje için etkinleştirdiğiniz API'lere erişmek üzere kimlik bilgilerini kullanabilir.

  1. Müşteriler sayfasına gidin.
  2. Create Client'ı (İstemci Oluştur) tıklayın.
  3. TV'ler ve sınırlı giriş cihazları uygulama türünü seçin.
  4. OAuth 2.0 istemcinizi adlandırın ve Oluştur'u tıklayın.

Erişim kapsamlarını belirleme

Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim istemesini sağlarken kullanıcıların da uygulamanıza verdikleri erişim miktarını kontrol etmelerine olanak tanır. Bu nedenle, istenen kapsam sayısı ile kullanıcı rızası alma olasılığı arasında ters bir ilişki olabilir.

OAuth 2.0 yetkilendirmesini uygulamaya başlamadan önce uygulamanızın erişim izni gerektirecek kapsamları belirlemenizi öneririz.

Yüklü uygulamalar veya cihazlar için İzin verilen kapsamlar listesine bakın.

OAuth 2.0 erişim jetonları alma

Uygulamanız sınırlı giriş özelliklerine sahip bir cihazda çalışsa bile kullanıcıların bu yetkilendirme akışını tamamlamak için daha zengin giriş özelliklerine sahip bir cihaza ayrı erişimi olmalıdır. Akış aşağıdaki adımlardan oluşur:

  1. Uygulamanız, Google'ın yetkilendirme sunucusuna bir istek gönderir. Bu istek, uygulamanızın erişim izni isteyeceği kapsamları tanımlar.
  2. Sunucu, sonraki adımlarda kullanılacak birkaç bilgiyle (ör. cihaz kodu ve kullanıcı kodu) yanıt verir.
  3. Kullanıcının uygulamanızı yetkilendirmek için ayrı bir cihaza girebileceği bilgileri gösterirsiniz.
  4. Uygulamanız, kullanıcının uygulamanızı yetkilendirip yetkilendirmediğini belirlemek için Google'ın yetkilendirme sunucusunu sorgulamaya başlar.
  5. Kullanıcı daha zengin giriş özelliklerine sahip bir cihaza geçer, web tarayıcısı başlatır, 3. adımda gösterilen URL'ye gider ve yine 3. adımda gösterilen kodu girer. Kullanıcı, uygulamanıza erişim izni verebilir (veya erişimi reddedebilir).
  6. Yoklama isteğinize verilen bir sonraki yanıt, uygulamanızın kullanıcı adına istekleri yetkilendirmek için ihtiyaç duyduğu jetonları içerir. (Kullanıcı uygulamanıza erişimi reddettiyse yanıtta jeton bulunmaz.)

Resimde bu süreç gösterilmektedir:

Kullanıcı, tarayıcısı olan ayrı bir cihazda oturum açar.

Aşağıdaki bölümlerde bu adımlar ayrıntılı olarak açıklanmaktadır. Cihazların sahip olabileceği özelliklerin ve çalışma zamanı ortamlarının çeşitliliği göz önünde bulundurularak bu belgedeki örneklerde curl komut satırı yardımcı programı kullanılmıştır. Bu örnekler çeşitli dillere ve çalışma zamanlarına taşınabilir.

1. adım: Cihaz ve kullanıcı kodlarını isteyin

Bu adımda cihazınız, Google'ın https://oauth2.googleapis.com/device/code adresindeki yetkilendirme sunucusuna bir HTTP POST isteği gönderir. Bu istek, uygulamanızı ve uygulamanızın kullanıcı adına erişmek istediği erişim kapsamlarını tanımlar. Bu URL'yi device_authorization_endpoint meta veri değerini kullanarak keşif belgesinden almanız gerekir. Aşağıdaki HTTP istek parametrelerini ekleyin:

Parametreler
client_id Zorunlu

Uygulamanızın istemci kimliği. Bu değeri Cloud Console'daki İstemciler sayfasında bulabilirsiniz.

scope Zorunlu

Uygulamanızın kullanıcı adına erişebileceği kaynakları tanımlayan, boşlukla ayrılmış kapsam listesi. Bu değerler, Google'ın kullanıcıya gösterdiği kullanıcı rızası ekranını bilgilendirir. Yüklü uygulamalar veya cihazlar için İzin verilen kapsamlar listesine bakın.

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 etmelerine olanak tanır. Bu nedenle, istenen kapsam sayısı ile kullanıcı rızası alma olasılığı arasında ters bir ilişki vardır.

Örnekler

Aşağıdaki snippet'te örnek bir istek gösterilmektedir:

POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=client_id&scope=email%20profile

Bu örnekte, aynı isteği göndermek için kullanılan bir curl komutu gösterilmektedir:

curl -d "client_id=client_id&scope=email%20profile" \
     https://oauth2.googleapis.com/device/code

2. adım: Yetkilendirme sunucusu yanıtını işleme

Yetkilendirme sunucusu aşağıdaki yanıtlardan birini döndürür:

Başarılı yanıt

İstek geçerliyse yanıtınız aşağıdaki özellikleri içeren bir JSON nesnesi olur:

Özellikler
device_code Google'ın, yetkilendirme isteyen uygulamayı çalıştıran cihazı tanımlamak için benzersiz olarak atadığı değer. Kullanıcı, daha gelişmiş giriş özelliklerine sahip başka bir cihazdan bu cihazı yetkilendirecektir. Örneğin, bir kullanıcı TV'de çalışan bir uygulamayı yetkilendirmek için dizüstü bilgisayar veya cep telefonu kullanabilir. Bu durumda, device_code TV'yi tanımlar.

Bu kod, uygulamayı çalıştıran cihazın, kullanıcının erişim izni verip vermediğini güvenli bir şekilde belirlemesini sağlar.

expires_in device_code ve user_code değerlerinin geçerli olduğu saniye cinsinden süre. Bu süre içinde kullanıcı yetkilendirme akışını tamamlamazsa ve cihazınız da kullanıcının kararı hakkında bilgi almak için yoklama yapmazsa bu işlemi 1. adımdan itibaren yeniden başlatmanız gerekebilir.
interval Cihazınızın yoklama istekleri arasında beklemesi gereken süre (saniye cinsinden). Örneğin, değer 5 ise cihazınız her beş saniyede bir Google'ın yetkilendirme sunucusuna yoklama isteği göndermelidir. Daha fazla bilgi için 3. adıma bakın.
user_code Uygulamanın erişim istediği kapsamları Google'a tanımlayan, büyük/küçük harfe duyarlı bir değer. Kullanıcı arayüzünüz, kullanıcıdan bu değeri daha zengin giriş özelliklerine sahip ayrı bir cihaza girmesini ister. Google daha sonra, kullanıcıdan uygulamanıza erişim izni vermesini isterken doğru kapsam grubunu görüntülemek için bu değeri kullanır.
verification_url Kullanıcının user_code değerini girmek ve uygulamanıza erişim izni vermek veya erişimi reddetmek için ayrı bir cihazda gitmesi gereken URL. Kullanıcı arayüzünüzde de bu değer gösterilir.

Aşağıdaki snippet'te örnek bir yanıt gösterilmektedir:

{
  "device_code": "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code": "GQVQ-JKEC",
  "verification_url": "https://www.google.com/device",
  "expires_in": 1800,
  "interval": 5
}

Kota aşıldı yanıtı

Cihaz kodu istekleriniz istemci kimliğinizle ilişkili kotayı aşarsa aşağıdaki hatayı içeren bir 403 yanıtı alırsınız:

{
  "error_code": "rate_limit_exceeded"
}

Bu durumda, isteklerin sıklığını azaltmak için bir bekleme stratejisi kullanın.

3. adım: Kullanıcı kodunu gösterin

2. adımda elde edilen verification_url ve user_code değerlerini kullanıcıya gösterin. Her iki değer de US-ASCII karakter kümesindeki tüm yazdırılabilir karakterleri içerebilir. Kullanıcıya gösterdiğiniz içerik, kullanıcıyı ayrı bir cihazda verification_url adresine gidip user_code girmeye yönlendirmelidir.

Kullanıcı arayüzünüzü (UI) aşağıdaki kuralları göz önünde bulundurarak tasarlayın:

  • user_code
    • user_code, 15 "W" boyutunda karakteri işleyebilen bir alanda gösterilmelidir. Başka bir deyişle, WWWWWWWWWWWWWWW kodunu doğru şekilde görüntüleyebiliyorsanız kullanıcı arayüzünüz geçerlidir ve user_code kodunun kullanıcı arayüzünüzde nasıl görüntülendiğini test ederken bu dize değerini kullanmanızı öneririz.
    • user_code büyük/küçük harfe duyarlıdır ve büyük/küçük harf durumunu değiştirme veya başka biçimlendirme karakterleri ekleme gibi herhangi bir şekilde değiştirilmemelidir.
  • verification_url
    • verification_url gösterdiğiniz alan, 40 karakter uzunluğunda bir URL dizesini barındıracak kadar geniş olmalıdır.
    • verification_url, isteğe bağlı olarak görüntüleme şemasını kaldırmak dışında hiçbir şekilde değiştirilmemelidir. Görüntüleme nedeniyle URL'den şemayı (ör. https://) kaldırmayı planlıyorsanız uygulamanızın hem http hem de https varyantlarını işleyebildiğinden emin olun.

4. adım: Google'ın yetkilendirme sunucusunu sorgulama

Kullanıcı, verification_url adresine gidip erişim izni vermek (veya reddetmek) için ayrı bir cihaz kullanacağından, kullanıcı erişim isteğine yanıt verdiğinde istekte bulunan cihaza otomatik olarak bildirim gönderilmez. Bu nedenle, istekte bulunan cihazın, kullanıcının isteğe ne zaman yanıt verdiğini belirlemek için Google'ın yetkilendirme sunucusunu yoklaması gerekir.

İstek gönderen cihaz, kullanıcının erişim isteğine yanıt verdiğini belirten bir yanıt alana veya 2. adımda elde edilen device_code ve user_code değerlerinin süresi dolana kadar yoklama istekleri göndermeye devam etmelidir. 2. adımda döndürülen interval, istekler arasında beklenecek süreyi saniye cinsinden belirtir.

Sorgulanacak uç noktanın URL'si: https://oauth2.googleapis.com/token. Sorgulama isteği aşağıdaki parametreleri içerir:

Parametreler
client_id Uygulamanızın istemci kimliği. Bu değeri Cloud Console'daki İstemciler sayfasında bulabilirsiniz.
client_secret Sağlanan client_id için istemci gizli anahtarı. Bu değeri Cloud Console'daki İstemciler sayfasında bulabilirsiniz.
device_code Yetkilendirme sunucusu tarafından 2. adımda döndürülen device_code.
grant_type Bu değeri urn:ietf:params:oauth:grant-type:device_code olarak ayarlayın.

Örnekler

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=client_id&
client_secret=client_secret&
device_code=device_code&
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code

Bu örnekte, aynı isteği göndermek için kullanılan bir curl komutu gösterilmektedir:

curl -d "client_id=client_id&client_secret=client_secret& \
         device_code=device_code& \
         grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code" \
         -H "Content-Type: application/x-www-form-urlencoded" \
         https://oauth2.googleapis.com/token

5. adım: Kullanıcı erişim isteğine yanıt verir

Aşağıdaki resimde, kullanıcıların 3. adımda gösterdiğiniz verification_url sayfasına gittiklerinde gördüklerine benzer bir sayfa gösterilmektedir:

Kod girerek cihaz bağlama

user_code girildikten ve henüz giriş yapılmadıysa Google'a giriş yapıldıktan sonra kullanıcı bir kullanıcı rızası ekranı görür:

Cihaz istemcisi için örnek kullanıcı rızası ekranı

6. adım: Yoklama isteklerine verilen yanıtları işleme

Google'ın yetkilendirme sunucusu, her yoklama isteğine aşağıdaki yanıtlardan biriyle yanıt verir:

Erişim izni verildi

Kullanıcı cihaza erişim izni verdiyse (kullanıcı rızası ekranında Allow seçeneğini tıklayarak) yanıtta bir erişim jetonu ve yenileme jetonu bulunur. Jetonlar, cihazınızın kullanıcı adına Google API'lerine erişmesine olanak tanır. (Yanıttaki scope özelliği, cihazın hangi API'lere erişebileceğini belirler.)

Bu durumda API 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 kullanım ömrü.
refresh_token Yeni bir erişim jetonu almak için kullanabileceğiniz jeton. Yenileme jetonları, kullanıcı erişimi iptal edene veya yenileme jetonunun süresi dolana kadar geçerlidir. Yenileme jetonlarının cihazlar 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ı dizelerden oluşan bir liste olarak ifade edilir.
token_type Döndürülen jetonun türü. Bu değer her zaman Bearer olur.

Aşağıdaki snippet'te örnek bir yanıt gösterilmektedir:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
  "token_type": "Bearer",
  "refresh_token": "1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

Erişim jetonlarının kullanım ömrü sınırlıdır. Uygulamanızın uzun bir süre boyunca bir API'ye erişmesi gerekiyorsa yeni bir erişim jetonu almak için yenileme jetonunu kullanabilir. Uygulamanızın bu tür bir erişime ihtiyacı varsa yenileme jetonunu daha sonra kullanmak üzere saklaması gerekir.

Erişim reddedildi

Kullanıcı cihaza erişim izni vermeyi reddederse sunucu yanıtında 403 HTTP yanıt durum kodu (Forbidden) bulunur. Yanıt aşağıdaki hatayı içerir:

{
  "error": "access_denied",
  "error_description": "Forbidden"
}

Yetkilendirme bekleniyor

Kullanıcı yetkilendirme akışını henüz tamamlamadıysa sunucu, 428 HTTP yanıt durum kodu (Precondition Required) döndürür. Yanıt aşağıdaki hatayı içerir:

{
  "error": "authorization_pending",
  "error_description": "Precondition Required"
}

Çok sık yoklama yapılıyor

Cihaz çok sık yoklama isteği gönderirse sunucu 403 HTTP yanıt durum kodu (Forbidden) döndürür. Yanıt aşağıdaki hatayı içerir:

{
  "error": "slow_down",
  "error_description": "Forbidden"
}

Diğer hatalar

Yetkilendirme sunucusu, sorgulama isteğinde gerekli parametrelerden herhangi biri eksikse veya yanlış bir parametre değeri varsa da hata döndürür. Bu istekler genellikle 400 (Bad Request) veya 401 (Unauthorized) HTTP yanıt durum koduna sahiptir. Bu hatalar şunlardır:

Hata HTTP Durum Kodu Açıklama
admin_policy_enforced 400 Google Hesabı, Google Workspace yöneticisinin politikaları nedeniyle istenen bir veya daha fazla kapsamı yetkilendiremiyor. Yöneticilerin, OAuth istemci kimliğinize açıkça erişim izni verilene kadar kapsamlara erişimi nasıl kısıtlayabileceği hakkında daha fazla bilgi için Google Workspace verilerine hangi üçüncü taraf uygulamalar ve dahili uygulamaların erişebileceğini yönetme başlıklı Google Workspace Yönetici Yardım makalesini inceleyin.
invalid_client 401

OAuth istemcisi bulunamadı. Örneğin, client_id parametre değeri geçersizse bu hata oluşur.

OAuth istemci türü yanlış. İstemci kimliğinin uygulama türünün TV'ler ve Sınırlı Giriş Cihazları olarak ayarlandığından emin olun.

invalid_grant 400 code parametre değeri geçersiz, daha önce hak talebinde bulunulmuş veya ayrıştırılamıyor.
unsupported_grant_type 400 grant_type parametre değeri geçersiz.
org_internal 403 İstekteki OAuth istemci kimliği, Google Hesaplarına erişimi belirli bir Google Cloud kuruluşunda sınırlayan bir projenin parçasıdır. OAuth uygulamanızın kullanıcı türü yapılandırmasını onaylayın.

Google API'lerini çağırma

Uygulamanız bir erişim jetonu aldıktan sonra, API'nin gerektirdiği erişim kapsamları verilmişse belirli bir kullanıcı hesabı adına Google API'sine çağrı yapmak için jetonu kullanabilirsiniz. Bunu yapmak için bir access_token sorgu parametresi veya bir Authorization HTTP üstbilgisi Bearer değeri ekleyerek erişim jetonunu API'ye gönderilen bir isteğe ekleyin. Mümkün olduğunda HTTP başlığı tercih edilir çünkü sorgu dizeleri sunucu günlüklerinde görünür. Çoğu durumda, Google API'lerine ç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 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

access_token sorgu dizesi parametresini kullanan kimliği doğrulanmış kullanıcı için aynı API'ye yapılan ç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 üstbilgisi seçeneğini (tercih edilen) kullanan bir örnek aşağıda verilmiştir:

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 belirli aralıklarla dolar ve ilgili API isteği için geçersiz kimlik bilgileri haline gelir. Jetonla ilişkili kapsamlara çevrimdışı erişim istediyseniz kullanıcıdan izin istemeden (kullanıcı mevcut olmadığında bile) erişim jetonunu yenileyebilirsiniz.

Uygulamanız, erişim jetonunu yenilemek için Google'ın yetkilendirme sunucusuna (https://oauth2.googleapis.com/token) istek gövdesinde aşağıdaki parametreleri içeren bir HTTPS POST isteği gönderir:

Ad Değer
client_id API Konsolu'ndan alınan istemci kimliği.
client_secret İsteğe bağlı

API Konsolu'ndan alınan istemci gizli anahtarı.

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ş tokuşundan 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&
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 jetonlarının sayısıyla ilgili sınırlamalar olduğunu unutmayın. Bu sınırlamalardan biri istemci/kullanıcı kombinasyonu başına, diğeri ise tüm istemciler genelinde kullanıcı başınadı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ırlara takılabilir. Bu durumda eski yenileme jetonları çalışmayı durdurur.

Jeton iptali

Bazı durumlarda kullanıcılar bir uygulamaya verilen erişimi iptal etmek isteyebilir. Kullanıcı, Hesap Ayarları'nı ziyaret ederek erişimi iptal edebilir. Daha fazla bilgi için Hesabınıza erişimi olan üçüncü taraf siteleri ve uygulamaları destek dokümanındaki Site veya uygulama erişimini kaldırma bölümüne bakın.

Bir uygulamanın, kendisine verilen erişimi programatik olarak iptal etmesi de mümkündür. Programatik iptal; kullanıcının abonelikten çıktığı, bir uygulamayı kaldırdığı veya bir uygulama için gereken API kaynaklarının önemli ölçüde değiştiği durumlarda önemlidir. Başka bir deyişle, kaldırma işleminin bir parçası olarak, uygulamaya daha önce verilen izinlerin kaldırıldığından emin olmak için bir API isteği gönderilebilir.

Bir jetonu programatik olarak iptal etmek için uygulamanız https://oauth2.googleapis.com/revoke adresine 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 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 koşulları için hata koduyla birlikte bir HTTP durum kodu 400 döndürülür.

İzin verilen kapsamlar

Cihazlar için OAuth 2.0 akışı yalnızca aşağıdaki kapsamlarda desteklenir:

OpenID Connect, Google ile Oturum Açma

  • email
  • openid
  • profile

Drive API

  • https://www.googleapis.com/auth/drive.appdata
  • https://www.googleapis.com/auth/drive.file

YouTube API'si

  • https://www.googleapis.com/auth/youtube
  • https://www.googleapis.com/auth/youtube.readonly

Zamana dayalı erişim

Zamana dayalı erişim, kullanıcıların bir işlemi tamamlamak için uygulamanıza sınırlı bir süre boyunca verilerine erişim izni vermesine olanak tanır. Zaman tabanlı erişim, izin akışı sırasında belirli Google ürünlerinde kullanılabilir. Bu sayede kullanıcılar sınırlı bir süre için erişim izni verebilir. Verilerin tek seferlik aktarımını sağlayan Data Portability API buna örnek olarak verilebilir.

Kullanıcı, uygulamanıza zamana dayalı erişim izni verdiğinde yenileme jetonunun süresi belirtilen sürenin sonunda dolar. Yenileme jetonlarının belirli durumlarda daha erken geçersiz kılınabileceğini unutmayın. Ayrıntılar için bu durumlara bakın. Yetkilendirme kodu değişimi yanıtında döndürülen refresh_token_expires_in alanı, bu gibi durumlarda yenileme jetonunun süresi dolana kadar kalan süreyi gösterir.

Hesaplar Arası Koruma'yı uygulama

Kullanıcılarınızın hesaplarını korumak için atmanız gereken ek bir adım, Google'ın Hesaplar Arası Koruma Hizmeti'nden yararlanarak Hesaplar Arası Koruma'yı uygulamaktır. Bu hizmet, kullanıcı hesabındaki önemli değişiklikler hakkında uygulamanıza bilgi veren güvenlik etkinliği bildirimlerine abone olmanızı sağlar. Ardından, etkinliklere nasıl yanıt vereceğinize karar vermek için bu bilgileri kullanarak harekete geçin.

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'yı nasıl uygulayacağınız hakkında daha fazla bilgi ve mevcut etkinliklerin tam listesi için Kullanıcı hesaplarını Hesaplar Arası Koruma ile koruma sayfasını inceleyin.