Такая же проблема здесь, я добавил исходный код GoogleIdTokenVerifier в мой проект и изменил метод:
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;
}
просто обрабатывать исключения, второй сертификат работает отлично.
Edit: вы можете создать подкласс, как Erik-z предложил, если вы хотите, чтобы сделать его более чистым:
Edit 2: Я не могу заставить его работать, используя код ниже, я буду придерживаться уродливого хака выше.
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;
}
}
Такая же проблема здесь и с использованием Java 1.8.0_45. – brunnsbe
Я использую этот механизм в приложении Google при использовании токенов доступа из учетной записи менеджера учетных записей google. (Только что начал получать их час назад) –
@ user3686724 Какую аудиторию вы задали для GoogleIdTokenVerifier? Используете ли вы идентификатор клиента или идентификатор токена? (Мы сталкиваемся с той же проблемой за последние 60 минут) – orrsella