Я разрабатываю приложение с аутентификацией 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, которое я разверну в облаке.
/home/user/somefile.json
- person Jan Hernandez   schedule 12.03.2021