【发布时间】:2017-01-06 10:02:55
【问题描述】:
尝试使用 jjwt 验证 firebase id 令牌。使用 GoogleCredential 类提取私钥。但我不确定这是否正确。收到错误:JWT signature does not match locally computed signature.我应该在此处使用服务帐户 json 中的私钥吗?也许我误解了 ...setSigningKey(...) 的含义。
@Service
public class FirebaseAuthVerifier implements AuthVerifier {
private static final Logger logger = LoggerFactory.getLogger(FirebaseAuthVerifier.class);
@Autowired
private FirebaseProperties fbProps;
public boolean verify(AuthToken token) throws GeneralSecurityException, IOException {
// get google credential
InputStream stream = new FileInputStream("src/main/resources/service-account.json");
ByteArrayOutputStream streamCopy = new ByteArrayOutputStream();
ByteStreams.copy(stream, streamCopy);
stream.close();
GoogleCredential gc = GoogleCredential.fromStream(
new ByteArrayInputStream(streamCopy.toByteArray()),
new NetHttpTransport(),
GsonFactory.getDefaultInstance());
try {
Jwts.parser().setSigningKey(gc.getServiceAccountPrivateKey()).parse(token.getTokenId());
} catch(Exception e) {
// log
logger.info("Firebase auth token verification error: ");
logger.info(e.getMessage());
// claims may have been tampered with
return false;
}
return true;
}
}
【问题讨论】:
标签: java firebase jwt firebase-authentication google-authentication