частный API с использованием Firebase Authentication - PullRequest
0 голосов
/ 02 июля 2018

Я создаю частный API для своего приложения и пытаюсь защитить его с помощью Google Auth. Как я могу получить новый токен каждый запрос, чтобы я мог проверить его на своем собственном сервере с некоторым секретным ключом?

На панели инструментов Firebase я вижу секрет веб-клиента, но нет ни документации о том, как его использовать, ни что это за секрет.

Или, может быть, вы знаете некоторые хорошие практики по созданию закрытого API только для одного приложения. Спасибо!

1 Ответ

0 голосов
/ 03 июля 2018

Это довольно долгий процесс:

Следуйте https://developers.google.com/identity/sign-in/android/ для основного входа в Google Auth.

Для использования авторизации в бэкэнде есть несколько модификаций -

Шаг 1 - Поскольку вы уже нашли файл секретов клиента, используйте секретный идентификатор клиента, чтобы получить serverAuthCode. Нравится -

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestServerAuthCode(clientSecrets.getDetails().getClientId(), true)
                .requestEmail()
                .build();

Шаг 2 - В методе handleSignInResult, указанном в ссылке, вы можете получить свой код авторизации, который вы будете отправлять на свой сервер.

account.getServerAuthCode();

Шаг 3 - На вашем сервере вы можете получить токен доступа. Этот accessToken используется для использования почти всех API Google. По сути, получение accessToken означает, что ваш бэкэнд аутентифицирован в Google.

Добавьте файл секретов клиента в свой бэкэнд.

GoogleClientSecrets clientSecrets =
                GoogleClientSecrets.load(
                        JacksonFactory.getDefaultInstance(), new InputStreamReader(getAssets().open(Constants.CLIENT_SECRET_FILE_PATH)));


 if(!authCode.isEmpty()) {
            GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                    new NetHttpTransport(),
                    JacksonFactory.getDefaultInstance(),
                    "https://www.googleapis.com/oauth2/v4/token",
                    clientSecrets.getDetails().getClientId(),
                    clientSecrets.getDetails().getClientSecret(),
                    authCode,
                    "")
                    .execute();

            accessToken = tokenResponse.getAccessToken();
    }

Есть еще несколько шагов, так как authCode может использоваться только один раз, и accessToken истекает через некоторое время, и вам нужно запросить новый с refreshToken. Но это не входит в рамки этого вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...