Ошибка «Учетные данные не удалось получить метаданные» при попытке авторизации клиента Java в Firestore - PullRequest
0 голосов
/ 12 октября 2018

Я собрал то, что, как я думал, был привет-миром firestore Аутентификация клиента Java, но он постоянно умирает с

ПРЕДУПРЕЖДЕНИЕ: Ваше приложениепрошел проверку подлинности с использованием учетных данных конечного пользователя из Google Cloud SDK.Мы рекомендуем, чтобы большинство серверных приложений использовали учетные записи служб.Если ваше приложение продолжает использовать учетные данные конечного пользователя из Cloud SDK, вы можете получить сообщение об ошибке «Превышена квота» или «API не включен».Для получения дополнительной информации об учетных записях служб см. https://cloud.google.com/docs/authentication/. Учетные данные: ServiceAccountCredentials {clientId = 104986335035620796437, clientEmail=junkbot@nextbot3.iam.gserviceaccount.com, privateKeyId = 8e ... 11, transportFactoryClassName = com.google.auth.oauth2.OAuth2Utils $ DefaultHttpTransportFactory, tokenServerUri = https://oauth2.googleapis.com/token, scopes = [], serviceAccountUser = null} Исключение в потоке "main" java.util.concurrent.ExecutionException: com.google.api.gax.rpc.Unavoable.grpc.StatusRuntimeException: НЕДОСТУПЕН: учетным данным не удалось получить метаданные

«Учетные данные не смогли получить метаданные» не объясняет это - моя учетная запись службы JSON неверна?Почему это все еще дает мне это предупреждение, и они связаны?

val firestoreOptions = FirestoreOptions.getDefaultInstance().toBuilder()
        .setProjectId("nextbot3")
        .setCredentials(GoogleCredentials.fromStream(ClassLoader.getSystemClassLoader().getResourceAsStream("serviceAccountKey.json")))
        .setDatabaseId("nextbot3")
        .setTimestampsInSnapshotsEnabled(true)
        .build()
println("Credentials: " + firestoreOptions.credentials)
val db = firestoreOptions.service!!

val docRef = db.collection("users").document("a-user").collection("devices").document("a-bot")
println(docRef.set(mapOf("hello" to "world")).get())

мой serviceAccountKey.json прямо из того, что я скачал со страницы администрирования проекта облачного (не firebase):

{
  "type": "service_account",
  "project_id": "nextbot3",
  "private_key_id": "8edf2b2607309e5da929109550090a5818cd8511",
  "private_key": "-----BEGIN PRIVATE KEY--...--END PRIVATE KEY-----\n",
  "client_email": "junkbot@nextbot3.iam.gserviceaccount.com",
  "client_id": "104986335035620796437",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/junkbot%40nextbot3.iam.gserviceaccount.com"
}

1 Ответ

0 голосов
/ 13 октября 2018

Когда мы создаем FirestoreOptions через экземпляр по умолчанию (т. Е. FirestoreOptions.getDefaultInstance().toBuilder()), мы получаем Builder, настроенный с учетными данными приложения по умолчанию.Эти учетные данные имеют приоритет над указанной учетной записью службы.Используйте FirestoreOptions.newBuilder(), чтобы избежать этой ситуации.

...