0

Das ist also mein googleApiClient:Android Wie kann ich das Zugriffstoken vom authServerCode nehmen?

gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .requestServerAuthCode(serverID) 
      .build(); 
    mGoogleApiClient = new GoogleApiClient.Builder(PSSignInFlowActivity.this) 
      .enableAutoManage(this/* FragmentActivity */, this) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

Dies ist, was passiert, wenn ich die Login-Taste drücken:

public void login(){ 
    Log.i("", "handleSignInResult login:"); 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_SIGN_IN); 
} 

, die mich hier nimmt:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.i("", "handleSignInResult onActivityResult:" + requestCode + ".." + resultCode); 
    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
    if (requestCode == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     Log.i("","handleSignInResult onActivityResult: " +result.getSignInAccount() + ",,," + result.getStatus()); 
     handleSignInResult(result); 
    } 
} 

Welche dies nennt:

private void handleSignInResult(GoogleSignInResult result) { 
    Log.i("", "handleSignInResult:" + result.isSuccess()); 
    if (result.isSuccess()) { 
     // Signed in successfully, show authenticated UI. 
     GoogleSignInAccount acct = result.getSignInAccount(); 
     String authCode = acct.getServerAuthCode(); 
//   if(authCode != null) 
//    storyFragment.setFromGoogle(authCode); 
    } else { 
     // Signed out, show unauthenticated UI. 
    } 
} 

Mein Problem ist, dass ich ein AccessToken von GoogleSignInResult brauche, aber ich bekomme nur den ServerAuthCode zurück. Ich habe gesehen, dass du den ServerAuthCode gegen einen Zugriff auf den Auth2-Spielplatz austauschen kannst. Kann dies programmgesteuert erfolgen?

+0

den Auth-Code auf den Server senden und es für einen Zugriffstoken auszutauschen, wie in der Dokumentation beschrieben: https://developers.google.com/identity/sign-in/android/offline-access –

Antwort

0

Dies funktioniert für mich:

try{ 
        String scope = "oauth2:" + Scopes.PROFILE; 
        Account account = new Account(acct.getEmail(), "com.google"); 
        final String token = GoogleAuthUtil.getToken(PSSignInFlowActivity.this, account, scope); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          storyFragment.setFromGoogle(token); 
         } 
        }); 
       }catch (Exception e){ 
        Log.e("","error trying to get client secret : " + e.getMessage()); 
       } 
+0

Ohne besondere Vorkehrungen, dies zu tun, wird Gelegenheit für Zugriffstokensubstitution Angriff einführen. http://android-developers.blogspot.com/2016/05/improving-security-and-user-experience.html –

+0

Haben Sie einen Backend-Server? Ist dies der Fall, senden Sie den Authentifizierungscode an Ihren Server und tauschen Sie ihn gegen ein Zugriffstoken aus, wie in der Dokumentation: developers.google.com/identity/sign-in/android/offline-access beschrieben –

Verwandte Themen