2015-10-13 10 views
7

Seguo these instructions (https://developers.google.com/identity/sign-in/android/backend-auth) per ottenere un token ID per essere inviato al mio back-end, ma quando ho creato String scopes = "audience:server:client_id:" + Service.SERVER_CLIENT_ID; (Sì, la SERVER_CLIENT_ID non è il client Android ID) non riesco a ottenere un token e genera questo errore.autenticazione di Google con un server back-end richiesto Scopes

E/Login: com.google.android.gms.auth.GoogleAuthException: Unknown

Tuttavia quando uso il seguente campo di applicazione, invece String scopes = "oauth2:profile email";

ho successo get 'un' token, ma non è il tempo che mi aspettavo che fosse e ho paura potrebbe essere sbagliata .

Le mie domande sono ...

1) Perché non l'scopes = "audience:server:client_id:" + SERVER_CLIENT_ID; utilizzate per la lavorazione guida?

2) Il token che ottengo dall'uso di String scopes = "oauth2:profile email"; è sicuro per la verifica di un utente su un back-end?

Il codice è di seguito.

@Override 
    protected String doInBackground(Void... params) { 
     String accountName = Plus.AccountApi.getAccountName(googleApiClient); 
     Account account = new Account(accountName, GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 
     //String scopes = "oauth2:profile email"; 
     String scopes = "audience:server:client_id:" + Service.SERVER_CLIENT_ID; // Not the app's client ID. 
     Log.d(TAG, "Account Name: " + accountName); 
     Log.d(TAG, "Scopes: " + scopes); 

     try { 
      userIdToken = GoogleAuthUtil.getToken(getApplicationContext(), account, scopes); 

      return userIdToken; 
     } catch (IOException e) { 
      Log.e(TAG, "IOError retrieving ID token.", e); 
      return null; 
     } catch (UserRecoverableAuthException e) { 
      startActivityForResult(e.getIntent(), RC_SIGN_IN); 
      return null; 
     } catch (GoogleAuthException e) { 
      Log.e(TAG, "GoogleAuthError retrieving ID token.", e); 
      return null; 
     } 
    } 

risposta

1

Quando si imposta l'ambito di OAuth2: profilo e-mail si ritorna un token di accesso, che è diverso da un token ID.

Un token di accesso può essere utilizzato per accedere alle API di Google, un token di identificazione è un JWT che contiene informazioni sull'identità dell'utente che è firmato digitalmente da Google. I formati sono diversi. Se provi ad autorizzare un token di accesso utilizzando il codice di esempio fornito per i token ID, riceverai un errore non valido.

Se si consulta la documentazione di GoogleAuthUtil.getToken(), si noterà che GoogleAuthException è un'eccezione irreversibile solitamente causata da un errore del client, ad esempio un ambito non valido o un client non valido. https://developers.google.com/android/reference/com/google/android/gms/auth/GoogleAuthUtil#getToken(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle)

Assicurarsi di aver impostato sia un App e Webserver OAuth2 ID in Google console per sviluppatori e che il nome del pacchetto nella vostra manifesta corrisponde al nome del pacchetto si fornisce con l'impronta digitale SHA quando si crea l'ID app. Utilizzare l'ID del server Web come SERVER_CLIENT_ID.

Ho caricato un codice di esempio in Github. https://github.com/kmosdev/google-signin-backend-auth

Ho iniziato con l'app di accesso di esempio di Google e l'ho modificata per aggiungere l'autenticazione di back-end. Ulteriori dettagli sono nel file Leggimi.

Un'altra cosa da controllare è che avete le autorizzazioni corrette nel file manifest, ma credo che ci si ottiene un errore diverso se questo era sbagliato:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
+0

prima off. Benvenuti in Stackoverflow. Secondo, datemi un secondo per vedere se questo mi indica la giusta direzione. (Sto votando questo nel frattempo) – SARose

+0

Grazie! So che non è una risposta completa, ma non ho potuto lasciare un commento e ho pensato che alcune informazioni fossero migliori di altre. – kmosdev

+0

potresti postare qualche codice di esempio per favore – SARose

Problemi correlati