Как защитить свои API Google Cloud Endpoints с помощью проверки токена Firebase?
Моя настройка:
Серверная часть Java, размещенная в Google App Engine, содержит API, созданные с использованием конечных точек Google Cloud.Мобильные клиентские приложения, содержащие сгенерированные клиентские библиотеки для конечных точек, упомянутых выше. Также интегрирован с Firebase для аутентификации и базы данных.Мое намерение состоит в том, чтобы пользователь мобильных клиентских приложений мог войти в мобильное приложение с использованием аутентификации Firebase, а затем подключиться к любому из внутренних API-интерфейсов, которые, в свою очередь, выполнят некоторую обработку, а затем прочитают или запишут данные в / из база данных Firebase.
Чтобы защитить API на сервере, я думаю, что мне придется использовать встроенный метод verifyIdToken () пакета Firebase Server SDK для (см.Проверка идентификационных токенов в Firebase) для декодирования токена ID пользователя, переданного из клиентского приложения. Так как verifyIdToken () работает асинхронно, как бы я интегрировал его с методом API в GAE? Пока у меня есть нечто похожее на следующее:
@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;
}