Soru GoogleAuthUtil.getToken geçersiz kimlik doğrulama kodu döndürüyor


Bir Android uygulamasından bir arka plana erişebileceğim bir kimlik doğrulama almak için aşağıdakileri kullanıyorum. Bu burada açıklanmıştır https://developers.google.com/identity/protocols/CrossClientAuth.

StringBuffer sb = new StringBuffer();
sb.append("oauth2:server:client_id:");
sb.append(getString(R.string.google_app_id));
sb.append(":api_scope:");
sb.append("profile email");
final String scope = sb.toString();
String token = GoogleAuthUtil.getToken(Activity.this, mAuthAccount, scope);

(mAuthAccount daha önce AccountPicker.newChooseAccountIntent kullanılarak ayarlanmıştı.)

Yukarıdaki, zaman aşımına uğramış kısa ömürlü bir kimlik doğrulama kodunu döndürür. Google sunucularına karşı kontrol etmek istiyorum ancak https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= GoogleAuthUtil.getToken tarafından döndürülen jeton dizesi "geçersiz jeton" değerini döndürür.

Kullanmaya çalışmadan önce kimlik doğrulama kodunun süresi dolmadığını nasıl doğrularım?

Düzenleme: İade edilen dize bir belirteç değildir, ancak bir jetonu elde etmek için bir google API ile değiştirilebilen bir yetkilendirme kodu (hatırladığım takdirde döndürülen dize "/ 4" ile değil "/ 1" veya "/ 2" ile başlar) doğru şekilde).

Kod her zaman çalışmaz (sunucumda) ve kodun kullanılıp kullanılamayacağını veya süresinin dolup dolmadığını kontrol etmeyi çok isterim.


17
2018-05-21 18:55


Menşei


bu cevabı kontrol et: stackoverflow.com/a/24982688/1484779 - jlopez
{"Error": "invalid_token"} alıyorum googleapis.com/oauth2/v1/tokeninfo GoogleAuthUtil.getToken'e bir çağrı yapıldıktan sonra sadece oluşturulan ve temperli değil. Belki de belirtecin türü yanlış? - wojciii
Ayrıca, jetonu geçersiz kılmaya ve GoogleAuthUtil.getToken () öğesini tekrar çağırmaya çalıştım. Googleapis.com adresinden hâlâ geçersiz bir belirteç yanıtım var. Anlamadığım bu. Neyi yanlış yaptığımı merak ediyorum. - wojciii
sorununu çözdün mü? senin sorunun neydi - Pedro Teran


Cevaplar:


Kullanmaya gerek yok app_id oauth jetonu almak için, sadece kapsamı değiştirmeniz gerekiyor

"oauth2:" + Scopes.PLUS_LOGIN

Bu durumda kapsamınız plus.login olabilir

Daha fazla bilgi:

REST API'ları için Google ile yetkilendirme

Kapsam Sınıfı


2
2018-05-29 21:19



Ben bir jeton alamıyorum. Kısa ömürlü bir kimlik doğrulama kodu alıyorum. Aynı kodu iki kez elde etmek nasıl mümkün olabilir? - wojciii


Görebildiğin gibi Simgenin doğrulanması belgeleri:

https://www.googleapis.com/oauth2/v1/tokeninfo 

Bir erişim belirteci kabul eder ve bu erişim hakkında bilgi döndürür   hangi uygulamanın hangi amaçla verildiği belirtilir.   belirtinin hedefi, kullanıcının kabul ettiği kapsamlar, kalan   jetonun ömrü ve kullanıcı kimliği.

Aşağıda böyle bir talebe bir örnek verilmiştir:

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg

TokenInfo son noktası, belirteci veya bir hatayı açıklayan bir JSON dizisiyle yanıt verir.

Tel üzerinde, yanıt aşağıdakilere benzer:

{
  "audience":"8819981768.apps.googleusercontent.com",
  "user_id":"123456789",
  "scope":"profile email",
  "expires_in":436
}

Jetonun süresi dolmuş, değiştirilmiş veya izinler kullanılmışsa   iptal edildiğinde, Google Yetkilendirme Sunucusu bir hatayla yanıt verecektir.   Hata, 400 durum kodu ve JSON gövdesi aşağıdaki gibi olur:

{"error":"invalid_token"}

Tasarım gereği, başarısızlık nedeni ile ilgili ek bilgi verilmemektedir.

Yani invalid_token jetonun süresi dolduğunda, üzerinde değişiklik yapıldığında veya izinler iptal edildiğinde geçerli bir yanıttır

DÜZENLE

Almak mümkündür invalid_token jetonun döndürülmesinden hemen sonra GoogleAuthUtil.getToken çünkü GoogleAuthUtil onu önbelleğe almış olabilir. Bu durumda aramalısın GoogleAuthUtil.invalidateToken.

Daha fazla bilgiyi burada bulabilirsiniz: http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html

DÜZENLE 2

Sadece eksik olduğunu fark ettim https://www.googleapis.com/auth/plus.login senin kapsamına. Lütfen eklemeyi deneyin, çünkü Çapraz İstemci Kimliğini kullanmak zorunlu görünüyor.


0
2018-05-25 08:46



Kullanıyorum "googleapis.com/auth/plus.login"; kapsamın bir parçası olarak. İade edilen jeton (string) her zaman googleapis.com/oauth2/v1/tokeninfo?access_token= <belirteci>;. Ben de buldum github.com/googledrive/crossclientoauth2-android çalışan bir örnek olmalı. - wojciii
Sadece görüyorum profile email gibi api_scope Gönderdiğiniz kodda. Kodunuzu, yaptığınız son düzenlemelerle günceller misiniz? - Mattia Maestrini


Tarafından alınan jeton GoogleAuthUtil.getToken() Bu şekilde bir erişim belirteci değil, bir kimlik belirteci.

Bunun yerine aşağıdaki URL'yi deneyin (not id_token yerine sorgu parametresi access_token):

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=<ID TOKEN>

0
2018-06-28 10:00