Como protejo minhas APIs do Google Cloud Endpoints com a verificação de token do Firebase?
Minha configuração:
Back-end Java hospedado no Google App Engine contendo APIs criadas usando o Google Cloud EndpointsAplicativos clientes móveis que contêm bibliotecas de clientes geradas para os terminais mencionados acima. Também integrado ao Firebase para autenticação e banco de dados.Minha intenção é que um usuário dos aplicativos clientes móveis consiga efetuar login no aplicativo móvel usando a autenticação Firebase, depois conectar-se a qualquer uma das APIs de back-end, que por sua vez, processará e lerá ou gravará dados de / para o banco de dados Firebase.
Para proteger as APIs no servidor, acho que vou precisar usar o método confirmIdToken () interno do Firebase Server SDK para (consulteVerificando ID Tokens no Firebase) para decodificar o token de ID do usuário transmitido do aplicativo cliente. Como CheckerIdToken () é executado de forma assíncrona, como eu o integraria a um método API no GAE? Até agora, tenho algo semelhante ao seguinte:
@ApiMethod(name = "processAndSaveToDB", httpMethod = "post")
public Response processAndSaveToDB(@Named("token") String token) {
Response response = new Response();
// Check if the user is authenticated first
FirebaseAuth.getInstance().verifyIdToken(idToken)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
String uid = decodedToken.getUid();
// do bulk of processAndSaveToDB() method
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// throw unauthorized exception
});
return response;
}