Как программно получить токен доступа для GCP Compute API - PullRequest
0 голосов
/ 07 сентября 2018

Мне нужна помощь для доступа к токенам в 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.

Спасибо!

1 Ответ

0 голосов
/ 07 сентября 2018

Согласно @DalmTo, вы должны использовать клиентскую библиотеку для Java. Это ссылка , с которой можно начать.

...