Мне нужна помощь для доступа к токенам в GCP. Я использую Java как язык программирования, и я пробовал разные подходы, такие как:
https://cloud.google.com/iap/docs/authentication-howto
и https://developers.google.com/identity/protocols/OAuth2ServiceAccount#jwt-auth
Я использую второй подход. Фрагмент кода:
String privateKeyId = "my-private-key";
long now = System.currentTimeMillis();
String signedJwt = null;
try {
Algorithm algorithm = Algorithm.RSA256(null, privateKey);
signedJwt = JWT.create()
.withKeyId(privateKeyId)
.withIssuer("my-issuer")
.withSubject("my-subject")
.withAudience("https://www.googleapis.com/compute/v1/compute.machineTypes.list")
.withIssuedAt(new Date(now))
.withExpiresAt(new Date(now + 3600 * 1000L))
.sign(algorithm);
} catch (Exception e){
e.printStackTrace();
}
return signedJwt;
Затем я выполняю get instance, устанавливая возвращенный токен как заголовок авторизации Bearer, но ответ:
com.google.api.client.http.HttpResponseException: 401 Unauthorized
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
С такими же учетными данными я могу получить доступ к SDK.
Спасибо!