2017-07-16 75 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 
    } 
}