Cùng một vấn đề ở đây, tôi đã thêm mã nguồn của GoogleIdTokenVerifier để dự án của tôi và thay đổi phương pháp:
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;
}
chỉ xử lý các ngoại lệ, Giấy chứng nhận thứ hai hoạt động tốt.
Edit: bạn có thể phân lớp như Erik-z gợi ý nếu bạn muốn làm cho nó sạch hơn:
Chỉnh sửa 2: Tôi không thể làm cho nó hoạt sử dụng mã dưới đây, tôi sẽ dính vào hack xấu xí trên.
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;
}
}
Cùng một vấn đề ở đây cũng như sử dụng Java 1.8.0_45. – brunnsbe
Tôi nhận được thông tin này trên công cụ ứng dụng của Google khi sử dụng mã thông báo truy cập từ tài khoản người quản lý tài khoản google. (Chỉ cần bắt đầu getitng họ một giờ trước) –
@ user3686724 Đối tượng bạn đặt cho GoogleIdTokenVerifier là gì? Bạn có sử dụng id ứng dụng hoặc id mã thông báo không? (Chúng tôi đã gặp phải sự cố tương tự trong 60 phút qua) – orrsella