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 aracılığıyla YouTube Data API'ye erişmek için OAuth 2.0 yetkilendirmesinin nasıl uygulanacağı açıklanmaktadır. Daha ayrıntılı belirtmek gerekirse bu akış, tarayıcı erişimi olmayan veya sınırlı giriş özelliklerine sahip 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'u kullanabilir.

Bu akışı kullanan uygulamalar ayrı cihazlara dağıtıldığı için uygulamaların gizlilik sağlayamayacağı varsayılır. Kullanıcı uygulamadayken veya uygulama arka planda çalışırken Google API'lerine erişebilirler.

Alternatifler

Android, iOS, macOS, Linux veya Windows (Universal Windows Platform dahil) gibi bir platform için tarayıcıya ve tam giriş özelliklerine erişimi olan bir uygulama yazıyorsanız mobil ve masaüstü uygulamaları için OAuth 2.0 akışını kullanın. (Uygulamanız grafik arayüzü olmayan bir komut satırı aracı olsa bile bu akışı kullanmanız gerekir.)

Kullanıcıların yalnızca Google Hesaplarıyla oturum açmasını ve temel kullanıcı profili bilgilerini almak için JWT kimlik jetonunu kullanmak 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 bu API'leri API Console'te etkinleştirmesi gerekir.

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

  1. Open the API Library , Google API Console
  2. If prompted, select a project, or create a new one.
  3. YouTube Data API'yi bulup etkinleştirmek için Kitaplık sayfasını kullanın. Uygulamanızın kullanacağı diğer API'leri bulup bunları da etkinleştirin.

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.

  1. Go to the Credentials page.
  2. Kimlik bilgisi oluştur > OAuth istemci kimliği seçeneğini tıklayın.
  3. TV'ler ve Sınırlı Giriş cihazları uygulama türünü seçin.
  4. OAuth 2.0 istemcinize ad verin ve Oluştur'u tıklayın.

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.

YouTube Data API v3 aşağıdaki kapsamları kullanır:

Scopes
https://www.googleapis.com/auth/youtubeManage your YouTube account
https://www.googleapis.com/auth/youtube.channel-memberships.creatorSee a list of your current active channel members, their current level, and when they became a member
https://www.googleapis.com/auth/youtube.force-sslSee, edit, and permanently delete your YouTube videos, ratings, comments and captions
https://www.googleapis.com/auth/youtube.readonlyView your YouTube account
https://www.googleapis.com/auth/youtube.uploadManage your YouTube videos
https://www.googleapis.com/auth/youtubepartnerView and manage your assets and associated content on YouTube
https://www.googleapis.com/auth/youtubepartner-channel-auditView private information of your YouTube channel relevant during the audit process with a YouTube partner

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şimleri olmalıdır. Akış aşağıdaki adımları içerir:

  1. Uygulamanız, Google'ın yetkilendirme sunucusuna bir istek göndererek uygulamanızın erişim izni isteyeceği kapsamları tanımlar.
  2. Sunucu, sonraki adımlarda kullanılan cihaz kodu ve kullanıcı kodu gibi çeşitli bilgilerle yanıt verir.
  3. Kullanıcının uygulamanızı yetkilendirmek için ayrı bir cihazda girebileceği bilgileri gösterirsiniz.
  4. Uygulamanız, kullanıcının uygulamanıza yetki verip vermediğini belirlemek için Google'ın yetkilendirme sunucusunu yoklamaya başlar.
  5. Kullanıcı, daha zengin giriş özelliklerine sahip bir cihaza geçer, bir web tarayıcısı başlatır, 3. adımda gösterilen URL'ye gider ve 3. adımda da gösterilen bir kodu girer. Kullanıcı, uygulamanıza erişim izni verebilir (veya reddedebilir).
  6. Anket 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ıt jeton içermez.)

Aşağıdaki resimde bu işlem gösterilmektedir:

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

Aşağıdaki bölümlerde bu adımlar ayrıntılı olarak açıklanmıştır. Cihazların sahip olabileceği çeşitli özellikler ve çalışma ortamı dikkate alınarak bu dokümanda gösterilen örneklerde curl komut satırı yardımcı programı kullanılmıştır. Bu örneklerin çeşitli dillere ve çalışma zamanlarına taşınması kolay olmalıdır.

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

Bu adımda cihazınız, https://oauth2.googleapis.com/device/code adresindeki Google'ın yetkilendirme sunucusuna bir HTTP POST isteği gönderir. Bu istek, uygulamanızın yanı sıra 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 Discovery belgesinden almanız gerekir. Aşağıdaki HTTP istek parametrelerini ekleyin:

Parametreler
client_id Zorunlu

Uygulamanızın istemci kimliği. Bu değeri şu adreste bulabilirsiniz: API Console Credentials page.

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. Yüklü uygulamalar veya cihazlar için İzin verilen kapsamlar listesine göz atın.

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.

YouTube Data API v3 aşağıdaki kapsamları kullanır:

Scopes
https://www.googleapis.com/auth/youtubeManage your YouTube account
https://www.googleapis.com/auth/youtube.channel-memberships.creatorSee a list of your current active channel members, their current level, and when they became a member
https://www.googleapis.com/auth/youtube.force-sslSee, edit, and permanently delete your YouTube videos, ratings, comments and captions
https://www.googleapis.com/auth/youtube.readonlyView your YouTube account
https://www.googleapis.com/auth/youtube.uploadManage your YouTube videos
https://www.googleapis.com/auth/youtubepartnerView and manage your assets and associated content on YouTube
https://www.googleapis.com/auth/youtubepartner-channel-auditView private information of your YouTube channel relevant during the audit process with a YouTube partner

OAuth 2.0 API Kapsamları belgesinde, Google API'lerine erişmek için kullanabileceğiniz kapsamların tam listesi sağlanı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=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl

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

curl -d "client_id=client_id&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl" \
     https://oauth2.googleapis.com/device/code

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

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

Başarı yanıtı

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

Özellikler
device_code Google'ın, yetkilendirme isteğinde bulunan uygulamayı çalıştıran cihazı tanımlamak için benzersiz şekilde atadığı bir değerdir. Kullanıcı, bu cihazı daha zengin giriş özelliklerine sahip başka bir cihazdan yetkilendirir. Örneğin, bir kullanıcı TV'de çalışan bir uygulamayı yetkilendirmek için dizüstü bilgisayar veya cep telefonu kullanabilir. Bu örnekte device_code, TV'yi tanımlar.

Bu kod, uygulamayı çalıştıran cihazın kullanıcının erişimi verip vermediğini güvenli bir şekilde belirlemesine olanak tanır.

expires_in device_code ve user_code öğelerinin geçerli olduğu saniye cinsinden süre. Bu süre zarfında kullanıcı yetkilendirme akışını tamamlamazsa ve cihazınız da kullanıcının kararıyla ilgili bilgi almak için anket yapmazsa bu işlemi 1. adımdan yeniden başlatmanız gerekebilir.
interval Cihazınızın anket istekleri arasında beklemesi gereken süre (saniye cinsinden). Örneğin, değer 5 ise cihazınız beş saniyede bir Google'ın yetkilendirme sunucusuna bir anket 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ıya bu değeri daha zengin giriş özelliklerine sahip ayrı bir cihazda girmesini söyler. Ardından Google, kullanıcıdan uygulamanıza erişim izni vermesini istediğinde doğru kapsam grubunu göstermek için bu değeri kullanır.
verification_url Kullanıcının user_code'ye girmek ve uygulamanıza erişim izni vermek ya da reddetmek için ayrı bir cihazda gitmesinin gerektiği 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 isteğiniz, istemci kimliğinizle ilişkili kotayı aştıysa aşağıdaki hatayı içeren bir 403 yanıtı alırsınız:

{
  "error_code": "rate_limit_exceeded"
}

Bu durumda, istek hızını azaltmak için geri çekilme 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ümesinden herhangi bir yazdırılabilir karakter içerebilir. Kullanıcıya gösterdiğiniz içerikte, kullanıcıya ayrı bir cihazda verification_url'e gidip user_code'yi girmesini söylemelisiniz.

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

  • user_code
    • user_code, 15 adet "W" boyutunda karakteri işleyebilecek bir alanda gösterilmelidir. Diğer bir deyişle, WWWWWWWWWWWWWWW kodunu doğru şekilde gösterebiliyorsanız kullanıcı arayüzünüz geçerlidir ve user_code değerinin kullanıcı arayüzünüzde gösterilme şeklini 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 değerini görüntülediğiniz alan, 40 karakter uzunluğundaki bir URL dizesini barındıracak kadar geniş olmalıdır.
    • Gösterim şemasını isteğe bağlı olarak kaldırmak dışında verification_url'te hiçbir şekilde değişiklik yapmamalısınız. 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 yoklayın

Kullanıcı, verification_url'e gitmek ve erişim izni vermek (veya reddetmek) için ayrı bir cihaz kullanacağından, kullanıcı erişim isteğine yanıt verdiğinde istek yapan cihaz otomatik olarak bilgilendirilmez. Bu nedenle, istek gönderen cihazın, kullanıcının isteğe ne zaman yanıt verdiğini belirlemek için Google'ın yetkilendirme sunucusunu sorgulaması gerekir.

İstekte bulunan 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 anket isteği göndermeye devam etmelidir. 2. adımda döndürülen interval, istekler arasında beklemeniz gereken saniye cinsinden süreyi belirtir.

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

Parametreler
client_id Uygulamanızın istemci kimliği. Bu değeri şu adreste bulabilirsiniz: API Console Credentials page.
client_secret Sağlanan client_id için istemci gizli anahtarı. Bu değeri şu adreste bulabilirsiniz: API Console Credentials page.
device_code 2. adımda yetkilendirme sunucusu tarafından 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 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, 3. adımda gösterdiğiniz verification_url sayfasına gittiklerinde kullanıcıların göreceği sayfaya benzer bir sayfa gösterilmektedir:

Kod girerek cihaz bağlama

Kullanıcı, user_code'yi girdikten ve henüz giriş yapmadıysa Google'a giriş yaptıktan sonra aşağıda gösterilen gibi bir izin ekranı görür:

Cihaz istemcisi için örnek izin ekranı

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

Google'ın yetkilendirme sunucusu, her anket isteği için aşağıdaki yanıtlardan biriyle yanıt verir:

Erişim izni verildi

Kullanıcı cihaza erişim izni verdiyse (izin ekranında Allow simgesini 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şmesini sağlar. (Yanıttaki scope mülkü, 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 kalan kullanım ömrü (saniye cinsinden).
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 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ı 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,
  "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 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 erişime ihtiyacı varsa yenileme jetonunu daha sonra kullanmak için saklamalıdır.

Erişim reddedildi

Kullanıcı cihaza erişim izni vermezse sunucu yanıtında 403 HTTP yanıt durum kodu (Forbidden) bulunur. Yanıt şu hatayı içerir:

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

Yetkilendirme bekleniyor

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

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

Çok sık anket yapılması

Cihaz çok sık anket isteği gönderirse sunucu bir 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, anket isteğinde gerekli parametreler eksikse veya yanlış bir parametre değeri varsa da hata döndürür. Bu isteklerin genellikle 400 (Bad Request) veya 401 (Unauthorized) HTTP yanıt durum kodu vardır. 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. Bir yöneticinin, 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 Yöneticisi Yardım makalesindeki Google Workspace verilerine hangi üçüncü taraf uygulamalarının ve dahili uygulamaların erişebileceğini yönetme başlıklı makaleyi inceleyin.
invalid_client 401

OAuth istemcisi bulunamadı. Örneğin, bu hata client_id parametresinin değeri geçersizse meydana gelir.

OAuth istemci türü yanlış. Müşteri kimliği için uygulama türünün TV'ler ve Sınırlı Giriş cihazları olarak ayarlandığından emin olun.

invalid_grant 400 code parametresi geçersiz, daha önce hak talebinde bulunulmuş veya ayrıştırılamamış.
unsupported_grant_type 400 grant_type parametresinin değeri geçersiz.
org_internal 403 İstekte bulunan OAuth istemci kimliği, belirli bir Google Cloud kuruluşundaki Google Hesaplarına erişimi sınırlayan bir projenin parçasıdır. OAuth uygulamanız için 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 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, YouTube Canlı Yayın API'sini çağırırken).

YouTube Canlı Yayın API'sinin, hizmet hesabı akışını desteklemediğini unutmayın. Hizmet hesaplarını YouTube hesaplarına bağlamak mümkün olmadığından, bu akışla isteklerin yetkilendirilmesi NoLinkedYouTubeAccount hatası oluşturur.

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 liveBroadcasts.list uç noktasına (YouTube Live Streaming API) yapılan bir çağrı aşağıdaki gibi görünebilir. Kendi erişim jetonunuzu belirtmeniz gerektiğini unutmayın:

GET /youtube/v3/liveBroadcasts?part=id%2Csnippet&mine=true 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/youtube/v3/liveBroadcasts?access_token=access_token&part=id%2Csnippet&mine=true

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/youtube/v3/liveBroadcasts?part=id%2Csnippet&mine=true

Alternatif olarak sorgu dizesi parametresi seçeneğini de kullanabilirsiniz:

curl https://www.googleapis.com/youtube/v3/liveBroadcasts?access_token=access_token&part=id%2Csnippet&mine=true

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ı.
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.

İ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

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.