Usare JWT in Vert.x e Java

Mattepuffo's logo
Usare JWT in Vert.x e Java

Usare JWT in Vert.x e Java

In Vert.x abbiamo una libreria apposita per usare JWT.

In questo articolo vediamo come usarlo in Java.

Prima di tuttto accertatevi di avere la dipendenza; se usate Maven:

<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-auth-jwt</artifactId>
</dependency>

Qui sotto vi posto una mia classe helper che sto usando in un progetto:

import io.vertx.core.Future;
import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.auth.JWTOptions;
import io.vertx.ext.auth.PubSecKeyOptions;
import io.vertx.ext.auth.User;
import io.vertx.ext.auth.jwt.JWTAuth;
import io.vertx.ext.auth.jwt.JWTAuthOptions;

public class JwtHelper {

  private static final String secret = "VOSTRO_SECRET";
  private JWTAuth provider;

  public JwtHelper() {
    this.provider = JWTAuth.create(Vertx.vertx(), new JWTAuthOptions()
      .addPubSecKey(
        new PubSecKeyOptions()
          .setAlgorithm("HS256")
          .setBuffer(secret)
      )
    );
  }

  public String relaeseToken() {
    return provider.generateToken(
      new JsonObject()
        .put("username", "mattepuffo"),
      new JWTOptions()
        .setIgnoreExpiration(true)
        .setSubject("mia-api")
        .setAlgorithm("HS256")
        .setIssuer("mia-api")
    );
  }

  public Future<User> checkToken(String token) {
    return provider.authenticate(new JsonObject().put("token", token));
  }

}

Allora:

  • il metedo releaseToken è quello che lo rilascia; tra le varie cose, ho aggiunto il dato username, al quale potete aggiungere tutti i dati che volete
  • il metodo checkToken si occupa di controllare se è valido, e ritorna un Future, che quindi poi va elaborato

Il releaseToken sicuramente lo userete in fase di login; mentre sull'altro metodo mi soffermo un attimo di più.

Io ho fatto una cosa del genere:

String authorization = routingContext.request().getHeader("Authorization");

HttpServerResponse response = routingContext.response();
if (!Strings.isNullOrEmpty(authorization)) { // HO USATO GOOGLE GUAVA
  String accessToken = routingContext.request().getHeader(HttpHeaders.AUTHORIZATION).substring("Bearer ".length());

  jwtHelper.checkToken(accessToken)
	.onSuccess(user -> {
	  response.putHeader("content-type", "application/json")
		.end(String.valueOf(user.principal()));
	})
	.onFailure(err -> {
	  response.putHeader("content-type", "application/json")
		.end(err.getMessage());
	});
} else {
  response.putHeader("content-type", "application/json")
	.end("Token richiesto");
}

Enjoy!


Condividi

Commentami!