В вашем вопросе не указано, в каком сервисе работает контейнер. Некоторые сервисы делают учетные данные приложения по умолчанию (ADC) доступными для контейнера через сервер метаданных или через секреты, другие - нет. Для тех служб, которые не предоставляют ADC, вам потребуется указать файл ключа учетной записи службы.
В этом ответе я покажу вам правильный способ получения Google OAuth Access Token. Если у вас нет особых технических причин, не создавайте токены из JWT.
Получите токен доступа из файла ключа JSON учетной записи службы:
import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.AccessToken;
import com.google.common.collect.Lists;
import java.io.FileInputStream;
import java.io.IOException;
class Main
{
public static void main(String args[])
{
String sa_file = "/fullpath/serviceaccount.json";
String scopes = "https://www.googleapis.com/auth/cloud-platform";
GoogleCredentials credentials;
try {
credentials = GoogleCredentials.fromStream(new FileInputStream(sa_file))
.createScoped(Lists.newArrayList(scopes));
}
catch (java.io.FileNotFoundException e) {
System.out.println("FileNotFoundException");
return;
}
catch (IOException e) {
System.out.println("IOException");
return;
}
try {
AccessToken accessToken;
accessToken = credentials.getAccessToken();
if (accessToken == null) {
accessToken = credentials.refreshAccessToken();
}
if (accessToken != null) {
System.out.println("Access Token: " + accessToken.getTokenValue());
}
}
catch (IOException e) {
System.out.println("IOException");
return;
}
}
}
Если в вашем контейнере доступны учетные данные приложения по умолчанию,вы можете получить учетные данные таким способом, и с помощью вышеуказанного метода извлеките токен доступа.
var credential = GoogleCredential.GetApplicationDefault();
Если вы работаете в службе Google, которая поддерживает сервер метаданных (Compute Engine и т. д.), вы можете получить AccessТокен по HTTP GET Запрос к этой конечной точке:
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
Вам потребуется включить этот заголовок HTTP в запрос GET:
Metadata-Flavor: Google