Las bibliotecas cliente de Cloud para Java usan la biblioteca de autenticación de Google para Java para autenticar solicitudes. Esta biblioteca admite varios tipos de autenticación.
Para obtener más información, consulta el README.md y el javadoc del proyecto.
Autenticación en un entorno de Google Cloud
Cuando usas bibliotecas de Google Cloud en un entorno de Google Cloud (como Compute Engine, Google Kubernetes Engine o App Engine), no necesitas realizar pasos de autenticación adicionales.
A continuación, se muestra un ejemplo de una llamada sin autenticación adicional:
Storage storage = StorageOptions.getDefaultInstance().getService();
Autenticación en entornos que no son deGoogle Cloud
Para autenticarse en un entorno que no es deGoogle Cloud , existen tres opciones comunes:
- (Recomendado) Usa una cuenta de servicio.
- Usa el SDK de Google Cloud con un entorno de prueba local.
- Usa un token de acceso de OAuth2 existente.
Usa una cuenta de servicio
Después de descargar la clave, debes realizar una de las siguientes acciones:
- Define la variable de entorno
GOOGLE_APPLICATION_CREDENTIALSpara que sea la ubicación de la clave. Por ejemplo:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/key.json- Proporciona el archivo de credenciales JSON cuando compiles las opciones de servicio. Por ejemplo, este objeto
Storagetiene los permisos necesarios para interactuar con tus datos de Cloud Storage:
Storage storage = StorageOptions.newBuilder() .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("/path/to/my/key.json"))) .build() .getService();- Define la variable de entorno
Usa el SDK de Google Cloud con un entorno de prueba local
Si usas un entorno local para el desarrollo o las pruebas, puedes usar el SDK de Google Cloud.
Crea credenciales predeterminadas de la aplicación con gcloud auth application-default login. Las bibliotecas cliente de Cloud para Java detectarán automáticamente estas credenciales.
Usa un token de acceso de OAuth2 existente
Si tienes un token de acceso de OAuth2, puedes usarlo para autenticarte. Si lo haces, el token de acceso no se actualizará automáticamente:
Credentials credentials = GoogleCredentials.create(new AccessToken(accessToken, expirationTime));
Storage storage = StorageOptions.newBuilder()
.setCredentials(credentials)
.build()
.getService();
Otro ejemplo:
Credentials credentials = GoogleCredentials.create(new AccessToken(accessToken, expirationTime));
CloudTasksSettings cloudTasksSettings = CloudTasksSettings.newBuilder()
.setCredentialProvider(FixedCredentialsProvider.create(credentials))
.build();
CloudTasksClient cloudTasksClient = CloudTasksClient.create(cloudTasksSettings);
Credencial predeterminada de la aplicación
Si no proporcionas credenciales, las bibliotecas cliente de Cloud para Java intentarán detectarlas en el entorno con GoogleCredentials.getApplicationDefault().
Este método busca credenciales predeterminadas de la aplicación en las siguientes ubicaciones, en orden:
- El archivo de credenciales al que apunta la variable de entorno
GOOGLE_APPLICATION_CREDENTIALS - Credenciales que proporciona el comando
gcloud auth application-default logindel SDK de Google Cloud - Son las credenciales integradas de Google App Engine.
- Google Cloud Son las credenciales integradas de Shell.
- Son las credenciales de la cuenta de servicio integrada de Google Compute Engine.
Autenticación con una clave de API
Algunas APIs de Google Cloud admiten la autenticación con claves de API.
Para usar una clave de API con las bibliotecas cliente de Cloud para Java, debes configurar manualmente el encabezado x-goog-api-key para el cliente de servicio pertinente.
Por ejemplo, para establecer la clave de API con Language service, haz lo siguiente:
public LanguageServiceClient createGrpcClientWithApiKey(String apiKey) throws Exception {
// Manually set the API key using the header
Map<String, String> header = new HashMap<String, String>() { {put("x-goog-api-key", apiKey);}};
FixedHeaderProvider headerProvider = FixedHeaderProvider.create(header);
// Create the client
TransportChannelProvider transportChannelProvider = InstantiatingGrpcChannelProvider.newBuilder().setHeaderProvider(headerProvider).build();
LanguageServiceSettings settings = LanguageServiceSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
LanguageServiceClient client = LanguageServiceClient.create(settings);
return client;
}
Ejemplo de creación de instancias con el cliente de Language usando REST:
public LanguageServiceClient createRestClientWithApiKey(String apiKey) throws Exception {
// Manually set the API key header
Map<String, String> header = new HashMap<String, String>() { {put("x-goog-api-key", apiKey);}};
FixedHeaderProvider headerProvider = FixedHeaderProvider.create(header);
// Create the client
TransportChannelProvider transportChannelProvider = InstantiatingHttpJsonChannelProvider.newBuilder().setHeaderProvider(headerProvider).build();
LanguageServiceSettings settings = LanguageServiceSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
LanguageServiceClient client = LanguageServiceClient.create(settings);
return client;
}