Мне нужна помощь с токенами доступа в 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;
Затем я выполняю экземпляры получения, устанавливая возвращенный токен как заголовок авторизации носителя, но ответ:
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.
Спасибо!
Спасибо за ответ. Это то, что я пытаюсь понять. Как я могу получить токен доступа через сервисный аккаунт?
вы должны использовать клиентскую библиотеку java, это будет проще, и возвращенные учетные данные пользователя будут иметь токен доступа, который вы можете использовать
Вы отметили как App Engine, так и Compute Engine. Ответы, скорее всего, будут разными. На какой платформе фактически размещен ваш код?
Моя платформа - Compute Engine.
Согласно @DalmTo, вы должны использовать клиентскую библиотеку для Java. Это ссылка, чтобы вы начали.
Помните, что код для учетной записи службы не совпадает с кодом для Oauth2, как и для созданных клиентов.