· kaynak dev.to (home feed)
Tek bir ölü YouTube refresh token'ı otomatik yayınlama hattını çökertti
Tek kişilik bir stüdyonun YouTube otomasyonu, bir refresh token süresi dolduğunda veya iptal edildiğinde Google'ın invalid_grant hatasıyla başarısız oldu ve log da hangisi olduğunu söyleyemiyor; bir yayın slotu kaybedildi.

Ne oldu
30 Eylül 2026'da, küçük bir stüdyonun YouTube otomasyonunun arkasındaki OAuth refresh token'ı çalışmayı bıraktı ve bu kimlik bilgisini paylaşan her zamanlanmış iş aynı hatayla başarısız oldu. Tek kişilik bir dijital ürün stüdyosu olan NeuraGrowth'un dev.to'daki yazısına göre ilk uyarı saat 05:20'de bir istatistik işinden, orqestra.kids_stats'tan geldi ve şu mesajla bir YouTubeRefreshExpired istisnası yükseltti: "YouTube refresh_token'ın süresi dolmuş veya iptal edilmiş. /settings içinde YouTube'u yeniden bağlayın (Google OAuth invalid_grant)."
Sekiz saat sonra, saat 14:00'te, orqestra.kids_publish adlı ikinci iş aynı istisnayla başarısız oldu. Sonuç izleyiciye ulaştı: Kids yayın slotu zwierzeta-006 çıkmadı, yerine hiçbir şey gönderilmedi ve uyarı operatöre videosı panelini ve kanalı kontrol etmesini, o sayıyı elle yayınlamadan önce kontrol yapmasını söyledi. Hattın ölü bir kimlik bilgisi için plan B'si otomatik bir yeniden deneme değil, elinde bir checklist olan bir insandı.
Süre dolması ve iptal aynı görünüyor
Mesaje iki olası durum sayılıyor ve log hangisinin geçerli olduğunu ya da nedenini kaydetmiyor. Bu belirsizlik Google'ın OAuth'unda doğal olarak var: invalid_grant, bir refresh token'ın artık bir access token ile takas edilemediğinde dönen hatadır ve kod nedenler arasında ayrım yapmaz.
Google'ın OAuth dokümantasyonu bir refresh token'ın ömrünü bitiren birkaç durumu listeler. Kullanıcı, uygulamanın erişimini istediği zaman iptal edebilir. Altı ay kullanılmayan token'ın süresi dolar. Bir kullanıcı hesabı tek bir client için çok fazla refresh token biriktirirse — belgelenmiş sınır 50'dir — en eskiler geçersiz kılınır. Bir uygulamanın OAuth consent screen'i hâlâ "Testing" yayınlama durumundayken verilen refresh token'lar yalnızca yedi gün dayanır. dev.to yazısı bunlardan hangisinin, varsa, sorumlu olduğunu belirtmiyor — ki asıl mesele de büyük ölçüde bu: bir entegrasyon genellikle bilemez, bu yüzden hepsini ele almak zorundadır.
Stüdyonun çıkardığı ders
Bir refresh token öldüğünde, ona bağlı her iş aynı şekilde başarısız olur. NeuraGrowth'un vardığı sonuç, yayınlamanın bozulmasını beklemek yerine ilk başarısız okumada harekete geçmek: bir sonraki slottan önce kimlik bilgisini yeniden bağlamak. Bu olayda 05:20'deki başarısızlık salt okunur bir istatistik işinden gelirken, 14:00'teki başarısızlık yayınlamaya vurdu; kaçırılan bir sayının görünür bir maliyeti var. Pahalı yazma işlerinden önce ucuz okuma işleri zamanlamak ve ilk yayınlama hatası yerine ilk kimlik doğrulama hatasında sert şekilde uyarmak, olayın zaten içinde barındırdığı sekiz saatlik pencereyi kullanmış olurdu.
Neden önemli
Refresh token'ları kalıcı muamelesi görmesi kolay şeylerdir: uzun ömürlüdürler, genellikle aylarca çalışmaya devam ederler ve ölümlerini önceden duyuran bir şey olmaz. Bu olay, invalid_grant'ın bir Google API entegrasyonu için egzotik bir bug değil, normal bir işletme durumu olduğunu ve paylaşılan tek bir OAuth kimlik bilgisinin, onu kullanan her zamanlanmış iş için tek bir arıza noktası olduğunu hatırlatıyor. YouTube'u veya diğer Google API'lerini otomatik hatlara bağlayan geliştiriciler hatayı açıkça ele almalı, genel bir hataya değil yeniden bağlanma aksiyonuna yönlendirmeli, salt okunur işleri kanarya olarak izlemeli ve otomasyonun kaçıracağı slotlar için manuel bir plan B bulundurmalıdır. Tek kişilik bir operasyon için o runbook, kaçırılmış bir sayı ile sakin bir gece arasındaki farktır.
- #oauth
- #youtube
- #google-api
- #automation
- #error-handling