JWT Token Google Cloud Run

Я разрабатываю приложение с аутентификацией JWT на облачной платформе Google. На стороне сервера Я добавил аутентификацию через Cloud API Gateway в облачный сервер. Теперь я делаю клиента для генерации токена JWT и передачи его в вызове. Для этого я создаю приложение, которое необходимо развернуть в CloudRun, и следую этой документации: https://cloud.google.com/api-gateway/docs/authenticate-service-account#making_an_authenticated_request. Моя проблема в том, что я не знаю, как указать, что для этого требуется, как saKeyfile. Я попытался указать только имя файла, который находится в src / main / resources / filetest.json, но как только я пытаюсь вызвать метод, он сообщает мне, что файл не найден. Я попытался указать также полный путь. Может кто-нибудь мне помочь?

PS Я использую Java

РЕДАКТИРОВАТЬ: вот мой код, который совпадает с документацией

 public void makeCall() {
    String fullPath="src/main/resources/TEST1-id.json";
    String saEmail="[email protected]";
    String audience="auth";
    int expiryLenght=600;
    String token;
    try {
        token=generateJwt(fullPath,saEmail,audience,expiryLenght);
        System.out.println("Token generated: "+token);
        URL url = new URL("apigatewayurl");
        makeJwtRequest(token, url);
        System.out.println("Call performed");
    } catch (IOException e) {
        e.printStackTrace();
    }

}

private static String generateJwt(final String saKeyfile, final String saEmail,
                                  final String audience, final int expiryLength)
        throws FileNotFoundException, IOException {

    Date now = new Date();
    Date expTime = new Date(System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(expiryLength));

    // Build the JWT payload
    JWTCreator.Builder token = JWT.create()
            .withIssuedAt(now)
            // Expires after 'expiraryLength' seconds
            .withExpiresAt(expTime)
            // Must match 'issuer' in the security configuration in your
            // swagger spec (e.g. service account email)
            .withIssuer(saEmail)
            // Must be either your Endpoints service name, or match the value
            // specified as the 'x-google-audience' in the OpenAPI document
            .withAudience(audience)
            // Subject and email should match the service account's email
            .withSubject(saEmail)
            .withClaim("email", saEmail);

    // Sign the JWT with a service account
    FileInputStream stream = new FileInputStream(saKeyfile);
    ServiceAccountCredentials cred = ServiceAccountCredentials.fromStream(stream);
    RSAPrivateKey key = (RSAPrivateKey) cred.getPrivateKey();
    Algorithm algorithm = Algorithm.RSA256(null, key);
    return token.sign(algorithm);
}

Я пытался использовать полный путь, как в примере, и используя только /TEST1-id.json

а вот и структура проекта. Это приложение Springboot, которое я разверну в облаке.

введите описание изображения здесь


comment
Не могли бы вы рассказать больше о своем коде, архитектуре и тестах, которые вы выполнили?   -  person guillaume blaquiere    schedule 09.03.2021
comment
Привет @guillaumeblaquiere, пост редактировал :)   -  person Francesco    schedule 10.03.2021
comment
Зачем вам нужен файл SA при развертывании в Cloud Run?   -  person guillaume blaquiere    schedule 10.03.2021
comment
Мне нужен файл sa для получения и генерации токена jwt для аутентификации на другом шлюзе api, который доступен только из этой учетной записи службы. Если есть другой способ, скажите, пожалуйста   -  person Francesco    schedule 10.03.2021
comment
вы пробовали полный путь к ОС? /home/user/somefile.json   -  person Jan Hernandez    schedule 12.03.2021
comment
Да, я пробовал. В конце концов, я поместил файл в корень, скопировал его в образ докера и восстановил его как переменную среды в облачном прогоне.   -  person Francesco    schedule 15.03.2021
comment
Вы можете добавить это в качестве ответа?   -  person Jan Hernandez    schedule 18.03.2021


Ответы (1)


ОП исправила проблему таким образом

В конце концов, я поместил файл в корень, скопировал его в образ докера и восстановил его как переменную среды в облачном прогоне.

person Community    schedule 23.03.2021