2015-12-06 3 views
0

J'essaie d'implémenter un processus qui combine la connexion Google côté client (page Web) avec la vérification côté serveur et l'interrogation des données utilisateur (serveur Java).API Google pour la connexion Web et l'interrogation des données utilisateur

Ce que je l'ai fait:

  1. Dans Google console développeur, a ajouté une OAuth 2.0 des informations d'identification ID client.

  2. Implémenter la connexion sur la page Web et obtenir le jeton d'identification après une connexion réussie.

  3. Implémenté l'authentification avec un serveur principal comme expliqué ici: https://developers.google.com/identity/sign-in/web/backend-auth. Cette partie fonctionne également et je peux vérifier l'authentification et obtenir l'adresse e-mail de l'utilisateur.

Ce que je dois faire est maintenant obtenir les informations relatives au profil de l'utilisateur, à savoir d'abord et nom et accéder au dossier de l'application, pour stocker des données d'application pertinentes.

Ceci est mon code de serveur. J'ai marqué la partie où j'ai besoin d'aide:

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(HTTP_TRANSPORT, JSON_FACTORY) 
.setAudience(Arrays.asList(service.getClientId())) 
.build(); 

GoogleIdToken idToken = null; 
try { 
    idToken = verifier.verify(token); // token is the ID token received from the client 
} catch (GeneralSecurityException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
if (idToken != null) { 
    GoogleIdToken.Payload payload = idToken.getPayload(); 
    payload.getEmail() <== This works 

    /* 
    Here I need to query Google API per the available application scopes: profile, app storage etc. 
    */ 
} 

Est-il possible d'utiliser l'API à ce stade? Si non, puis-je demander un jeton d'accès ici? Devrais-je utiliser l'ID de client ou ai-je besoin d'un autre type de données d'identification (comme une clé API ou un compte de service)?

Répondre

1

ID Token représente l'authentification, pas l'autorisation. Vous ne pourrez donc pas accéder aux API Google uniquement avec ID Token.

Afin de faire des requêtes aux API Google du côté serveur, suivez-les du côté client.

var auth2 = gapi.auth2.getAuthInstance(); 
auth2.grantOfflineAccess({ 
    scope: 'SCOPES_COMES_HERE' 
}).then(function(resp) { 
    // send `resp.code` to server to exchange it with 
    // credentials (access_token, refresh_token 
}); 

Le code est la clé d'échanger avec access_token. Vous pourriez être enclin à implémenter l'authentification et l'autorisation en même temps, mais la recommandation de Google est de les séparer et de demander des permissions quand elles sont nécessaires (autorisation incrémentale). Laissez le code actuel et ajoutez ci-dessus + côté serveur qui gère code pour échanger avec access_token.

Document détaillé: https://developers.google.com/identity/sign-in/web/server-side-flow

+0

Merci @agektmr. J'ai à peu près compris. Mon code client a l'air un peu différent, mais fondamentalement fait la même chose. On dirait que j'ai l'habitude d'utiliser un bouton normal au lieu du bouton de connexion de Google, à savoir déposer l'étiquette:

burgi