2013-10-20 17 views
7

Sto sviluppando un'applicazione Android, basata sulla comunicazione con il server, e voglio utilizzare i meccanismi di autenticazione di Google (g +).Convalida lato server token Google Access per app Android

Fondamentalmente, penso che dovrebbe funzionare in questo modo:

  1. Nella mia app Android, utente accede a Google, utilizzando il suo indirizzo email e la password.
  2. L'utente consente l'accesso ai suoi dati per la relativa applicazione Google.
  3. La mia app Android riceve il token di accesso, dopo aver effettuato il login.
  4. In ulteriori comunicazioni con il mio server, la mia applicazione Android dovrebbe utilizzare il token di accesso Google ricevuto (ad esempio: nelle query).
  5. Quando il mio server riceve alcune query dall'app Android, con token di accesso, dovrebbe chiedere a Google che questo token sia valido (e per chi), e in caso affermativo, il server dovrebbe presupporre che l'utente sia autenticato con Google.

La mia domanda è: come il server dovrebbe chiedere a Google se un token di accesso dato è valido? Penso che dovrei in qualche modo verificare se il token è valido per la mia app Android.

Ho provato molte query di Google alle API di Google, che ho trovato, ma nulla ha funzionato come mi aspettavo. Potete fornirmi qualche esempio?

+0

Non sono sicuro sulla questione. Dal momento che la tua app comunica direttamente con i server di google, dove entra in scena il tuo server personale? Puoi verificare la validità del token nella tua app Android. Puoi elaborare? – drulabs

+0

sto già ricevendo il token di accesso da g + nell'app client (android), sto inviando quel token di accesso al mio server, in quel server voglio convalidare quel token di accesso che è stato licenziato da Google o no e ho bisogno di ottenere informazioni utente ... usando quel token di accesso .... grazie per la risposta –

+0

Prova qualsiasi operazione. Come la ricerca o il caricamento o qualsiasi altra cosa se il token è valido, riceverai la risposta, altrimenti riceverai una risposta "non autorizzata". In genere il token scade ogni ora o quando l'utente modifica esplicitamente la password di google. Se l'autenticazione è stata eseguita correttamente, è necessario aver ricevuto token di aggiornamento con token di accesso. Utilizzare questo token di aggiornamento per ottenere un nuovo token di accesso. – drulabs

risposta

0

È possibile utilizzare l'endpoint tokeninfo per controllare un token (accesso o token ID). Se vuoi giocare con l'API, puoi usare lo TokenInfo API from the API Explorer.

È possibile utilizzare la libreria fornita da Google per OAuth v2 per eseguire le chiamate API.

È anche possibile creare l'URL ed eseguire una query GET come descritto nello OAuth v2 Playground documentation.

1

È possibile verificare se lo access_token è valido o meno.

È necessario inviare la richiesta GET all'endpoint API: https://www.googleapis.com/oauth2/v1/tokeninfo con access_token su richiesta.

Si può provare in questo modo:

String connection = new ConnectionService().connectionGoogle("https://www.googleapis.com/oauth2/v1/tokeninfo", "access_token=" + "YOUR_EXISTING_ACCESS_TOKEN"); 
     System.out.println(connection); 

I metodi utilizzati nel codice di cui sopra sono:

public static String connectionGoogle(String url, String parameter) throws MalformedURLException, ProtocolException, IOException { 

     URL url1 = new URL(url); 
     HttpURLConnection request1 = (HttpURLConnection) url1.openConnection(); 
     request1.setRequestMethod("GET"); 
     request1.setDoOutput(true); 
     request1.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     OutputStreamWriter wr = new OutputStreamWriter(request1.getOutputStream()); 
     wr.write(parameter); 
     wr.flush(); 
     request1.connect(); 
     String responseBody = convertStreamToString(request1.getInputStream()); 
     wr.close(); 
     return responseBody; 
    } 

    private static String convertStreamToString(InputStream is) { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     try { 
      while ((line = reader.readLine()) != null) { 
       sb.append(line).append("\n"); 
      } 
     } catch (IOException e) { 
     } finally { 
      try { 
       is.close(); 
      } catch (IOException e) { 
      } 
     } 

     return sb.toString(); 
    } 
+0

Ciao grazie per la tua risposta !! ma ci aspettiamo UserInfo ... ma ora sto convalidando con l'uso della classe Googlecredential ... –

+0

@BhargavMethuku quindi sei in grado di ottenere l'utenteinfo now.right ?? – Jhanvi

+0

sì ho bisogno di ottenere le informazioni utente –

Problemi correlati