Google OAuth token'larım neden her 7 günde bir ölüyordu

Her pazartesi YouTube kanal istatistiklerini çeken küçük bir ajanım var. Bir hafta çalıştı, sonra 400 hatasıyla durdu. Ardından aynısı yine oldu.
Belirti
Haftalık iş, kayıtlı bir refresh token ile YouTube Data API ve YouTube Analytics API'yi çağırıyor. Bir pazartesi token yenileme isteği HTTP 400 ve invalid_grant döndü: refresh token "süresi dolmuş ya da iptal edilmiş". Yeniden yetkilendirdim, rapor çalıştı; yedi gün sonra aynı şekilde yine durdu.
Kodda değişen bir şey yoktu, erişimi elle iptal eden de olmamıştı.
Sebep
Google Cloud projesinin OAuth onay ekranı External türünde ve yayın durumu Testing olarak ayarlıydı. Google'ın belgelerine göre bu durumdaki bir uygulamaya verilen refresh token'ların ömrü 7 gün. Token yanıtı da bunu açıkça söylüyordu: refresh_token_expires_in değeri 604799 saniyeydi, bir haftadan bir saniye eksik.
Yani token, ayarın söylediğini aynen yapıyordu.
Seçenekler
- Uygulamayı Production'a almak. Böylece refresh token'lar 7 günde dolmuyor. YouTube izinleri hassas izinler olduğu için doğrulanmamış bir uygulama onay sırasında uyarı ekranı gösteriyor ve kullanıcı sayısı sınırlı kalıyor. Tek kullanıcılı kişisel bir araç için bu genelde sorun değil. Daha geniş kullanım için Google'ın doğrulama sürecinden geçmek gerekiyor.
- Testing'de kalıp her hafta yeniden yetkilendirmek. Kısa bir deneme için yeterli, zamanlanmış bir iş için yorucu.
Bu arada neleri değiştirdim
- Rapor betiği artık sessizce başarısız olmuyor. Yenileme başarısız olursa rapora "yeniden yetkilendirme gerekli" yazıyor ve hata koduyla çıkıyor; ölü token aynı gün fark ediliyor.
- Yeniden yetkilendirme tek komut. Küçük bir yardımcı onay adresini yazdırıyor,
localhostyönlendirmesini yakalıyor ve yeni token dosyasını yazıyor. - Her oturumun başındaki durum kontrolü bütün token'ları deniyor ve iş başlamadan ölüleri listeliyor.
Bir tuzak daha
Her OAuth istemci türü her izni isteyemiyor. Cihaz akışı ("TV ve sınırlı giriş" istemcileri), onay ekranında ne olursa olsun YouTube Analytics iznini reddetti. Loopback yönlendirmeli bir Masaüstü uygulaması istemcisi ise çalıştı. Onay ekranı doğru göründüğü hâlde bir izin reddediliyorsa istemci türüne bakın.
Yeni makaleleri e-postayla alın
Yalnızca yeni bir makale çıktığında. Reklam yok. Ayrıntılar →