Использование App Engine (Java) для добавления пользовательских утверждений к токену Firebase пользователя, как показано здесь .Я использую учетные данные приложения по умолчанию в качестве учетной записи владельца проекта.Выполнение gcloud auth list
показывает, что активна правильная учетная запись.
Я настроил свои настройки Firebase в приложении следующим образом:
// Error handling and try/catches omitted
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setProjectId("<my-app>")
.setDatabaseUrl("https://<my-app>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
После установки я использую следующий кодадаптировано из примера здесь .
Map<String, Object> claims = new HashMap<>();
claims.put("role", "admin");
fbInstance.setCustomUserClaims(usersFirebaseAccessToken, claims);
Это приводит к следующей ошибке:
Ваше приложение аутентифицировано с использованием учетных данных конечного пользователя из Google Cloud SDK илиGoogle Cloud Shell, которые не поддерживаются identitytoolkit.googleapis.com.Мы рекомендуем, чтобы большинство серверных приложений использовали учетные записи служб.Для получения дополнительной информации об учетных записях служб и о том, как использовать их в вашем приложении, см. https://cloud.google.com/docs/authentication/.
Увидев это, я вернулся к стандартному подходу учетных записей служб, где вместо GoogleCredentials.getApplicationDefault()
я использовал ServiceAccountCredentials.fromStream(serviceAccountStream)
где serviceAccountStream = new FileInputStream("path-to-service-account-file")
.Это жаловалось на недостаточные привилегии, несмотря на наличие группы Firebase Admin
в настройках GCP IAM.Однако реальная проблема заключается в том, что в документации Identity Toolkit здесь упоминается, что Identity Toolkit заменяется на Firebase Authentication, что, похоже, было подходом, который я изначально пробовал.
I 'Мне интересно знать, что означает сообщение об ошибке выше под «конечным пользователем».Похоже, это говорит о том, что GCP SDK пытается аутентифицироваться как пользователь, представленный токеном Firebase, но я почти уверен, что это не то, что он означает.
Есть ли что-то, чего мне не хватает в моей Firebaseконфиг, который заставляет систему думать, что я не тот пользователь?