2

Ich habe eine Android-App mit Google-Anmeldung. Gemäß den documentation erzielen ich ein Token-ID:Wie validiere ich die Google Token ID, die von Android auf Ruby on Rails Server gesendet wurde?

// Configure Google Sign-In with the requestIdToken 

GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.server_client_id)) 
       .requestEmail() 
       .build(); 

// Handle result 

private void handleSignInResult(GoogleSignInResult result) { 
    if (result.isSuccess()) { 
     GoogleSignInAccount account = result.getSignInAccount(); 
     String tokenId = account.getIdToken(); 
    } 
} 

ich das Problem auf der Serverseite zugewandt ist, mit Ruby on Rails. Ich versuche zu verwenden google-id-token gem. Die Readme gibt folgendes Beispiel:

validator = GoogleIDToken::Validator.new(expiry: 1800) 
begin 
    payload = validator.check(token, required_audience, required_client_id) 
    email = payload['email'] 
rescue GoogleIDToken::ValidationError => e 
    report "Cannot validate: #{e}" 
end 

Ich habe die token (aus dem Android Java-Code). Was ist required_audience? Sollte ich die gleiche client_id meiner Client-App verwenden? Wenn ich versuche, den Code auf dem Server auszuführen, erhalte ich Payload als nil.

Auch würde ich gerne wissen, ob dies der richtige Weg ist, um die Token-ID zu überprüfen.

Antwort

1

Nach einigen Recherchen fand ich Antworten auf meine eigenen Fragen. Hier sind sie:

Was ist required_audience?

Es kann von entschlüsselten JWT-String erhalten werden. Sie können es dekodieren wie folgt:

JWT.decode(token, nil, false) 

Sollte ich die gleiche client_id meiner Client-Anwendung verwenden?

Ja. Die required_audience und required_client_id sollten identisch sein. Andernfalls schlägt die Überprüfung fehl

Warum bekam ich dann Nutzlast als nil?

Das Problem ist, die gem in GitHub und die in RubyGems sind unterschiedlich. Ich löste dieses Problem, indem ich Gemfile-Edelstein auf GitHub zeigte:

gem 'google-id-token', git: 'https://github.com/google/google-id-token.git'