Android + Firebase Auth + REST API: как правильно работать с токеном? - PullRequest
0 голосов
/ 15 мая 2018

Я начинаю новый проект, и Firebase Auth был выбором для аутентификации. Идея состоит в том, чтобы создать / авторизовать пользователей через Firebase Auth, а затем использовать токен Firebase ID для аутентификации на моем бэкэнде (через заголовок Authentication).

В Google Samples я должен получить токен следующим образом:

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });

Но, как вы можете видеть, это асинхронный вызов, потому что он идет к серверам Firebase, чтобы получить мне токен. Таким образом, при каждом вызове API REST моего бэкэнда мне нужно запускать приведенный выше код, потому что я не знаю, когда истек токен.

Есть ли лучший способ безопасного вызова моего бэкэнда REST API с использованием Firebase Auth? Или использование Firebase ID Token является лучшим? Если да, то как мне обернуть этот токен id для каждого вызова REST API?

Если у вас есть лучший способ аутентифицировать пользователей, чтобы они вызывали rest apis позже, я весь в ушах.

1 Ответ

0 голосов
/ 15 мая 2018

так что идея довольно проста.Вы можете использовать этот метод на устройстве Android, как вы уже знаете:

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });

После того, как вы удержите экземпляр токена, отправите его на сервер для аутентификации, он будет аутентифицироваться только один раз и отправит вам сервер.токен, который управляется самим бэкэндом.Это токен, который будет отправляться при каждом последующем обращении к бэкэнду, а не сгенерированный вышеуказанным методом.

...