Stesso problema qui, ho aggiunto il codice sorgente di GoogleIdTokenVerifier al mio progetto e cambiato il metodo:
public boolean verify(GoogleIdToken googleIdToken) throws GeneralSecurityException, IOException {
// check the payload
if (!super.verify(googleIdToken)) {
return false;
}
// verify signature
for (PublicKey publicKey : publicKeys.getPublicKeys()) {
try {
if (googleIdToken.verifySignature(publicKey)) {
return true;
}
} catch (Exception e) {
System.err.println("Verify Token:" + e);
}
}
return false;
}
solo gestire l'eccezione, il secondo certificato funziona benissimo.
Edit: è possibile creare una sottoclasse come Erik-z suggerito se si vuole rendere più pulito:
Edit 2: Non riesco a farlo funzionare usando il codice seguente, mi atterrò al brutto hack sopra.
package com.my.project.package;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.PublicKey;
import com.google.api.client.auth.openidconnect.IdTokenVerifier;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
// Remember to remove this class later by making it deprecated
@Deprecated
public class GoogleIdTokenVerifier2 extends GoogleIdTokenVerifier {
// Add constructors as needed
public GoogleIdTokenVerifier2(HttpTransport transport, JsonFactory jsonFactory) {
super(transport, jsonFactory);
}
@Override
public boolean verify(GoogleIdToken googleIdToken) throws GeneralSecurityException, IOException {
// check the payload
if (!((IdTokenVerifier)this).verify(googleIdToken)) {
return false;
}
// verify signature
for (PublicKey publicKey : getPublicKeysManager().getPublicKeys()) {
try {
if (googleIdToken.verifySignature(publicKey)) {
return true;
}
} catch (Exception e) {
System.err.println("Verify Token:" + e);
}
}
return false;
}
}
Lo stesso problema anche con Java 1.8.0_45. – brunnsbe
L'ho trovato sul motore di Google App quando utilizzai token di accesso dall'account gestore account di Google. (Ho appena iniziato a prenderli un'ora fa) –
@ user3686724 Qual è il pubblico che hai impostato per GoogleIdTokenVerifier? Utilizzi ID client o ID token? (Abbiamo riscontrato lo stesso problema negli ultimi 60 minuti) – orrsella