2017-07-16 82 views
0

我正在客戶端(android)和服務器端(Java)登錄谷歌。在android端,我得到了cliend id和訪問令牌,但我需要驗證訪問令牌並獲取服務器端的用戶信息,我跟着這個鏈接https://developers.google.com/identity/sign-in/android/backend-auth,但我無法理解的流程。此外,我得到了一個語法錯誤「令牌預期的語法錯誤」 GoogleIdToken idToken = verifier.verify(idTokenString) ; idTokenString是從android端獲得的字符串標記。Android使用谷歌登錄,服務器端java

任何人都可以幫助我解決這個問題,並理解流程。 這裏是我的代碼:

package com.secret.secret.utils; 
    import java.io.IOException; 
    import java.util.Collections; 
    import java.util.logging.Logger; 

    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServletResponse; 

    import org.apache.catalina.Authenticator; 
    import org.apache.catalina.connector.Request; 

    import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken; 
    import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload; 
    import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier; 
    import com.google.api.client.http.HttpTransport; 
    import com.google.api.client.json.JsonFactory; 
    public class GoogleUtil { 


private HttpTransport transport; 

private JsonFactory jsonFactory; 
String clientId="My client Id"; 

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory) 
     .setAudience(Collections.singletonList(clientId)) 
     // Or, if multiple clients access the backend: 
     //.setAudience(Arrays.asList(CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3)) 
     .build(); 

private GoogleIdToken idTokenString; 

    // (Receive idTokenString by HTTPS POST) 

    GoogleIdToken idToken = verifier.verify(idTokenString); 
    if (idToken != null) { 
     Payload payload = idToken.getPayload(); 

     // Print user identifier 
     String userId = payload.getSubject(); 
     System.out.println("User ID: " + userId); 

     // Get profile information from payload 
     String email = payload.getEmail(); 
     boolean emailVerified = Boolean.valueOf(payload.getEmailVerified()); 
     String name = (String) payload.get("name"); 
     String pictureUrl = (String) payload.get("picture"); 
     String locale = (String) payload.get("locale"); 
     String familyName = (String) payload.get("family_name"); 
     String givenName = (String) payload.get("given_name"); 

     // Use or store profile information 
     // ... 

    } else { 
     System.out.println("Invalid ID token."); 
    } 

    } 
    } 

回答

0

在Android客戶端:

public void handleSigninResult(GoogleSignInResult signInResult){ 
    if (signInResult.isSuccess()){ 
     GoogleSignInAccount account = signInResult.getSignInAccount(); 
     String idToken = account.getIdToken(); 

     //use this idToken in your server-side verification 
    } 
}