All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.scalecube.security.tokens.jwt.JsonwebtokenResolver Maven / Gradle / Ivy

The newest version!
package io.scalecube.security.tokens.jwt;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.Locator;
import java.security.Key;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class JsonwebtokenResolver implements JwtTokenResolver {

  private static final Logger LOGGER = LoggerFactory.getLogger(JsonwebtokenResolver.class);

  private final Locator keyLocator;

  public JsonwebtokenResolver(Locator keyLocator) {
    this.keyLocator = Objects.requireNonNull(keyLocator, "keyLocator");
  }

  @Override
  public CompletableFuture resolve(String token) {
    return CompletableFuture.supplyAsync(
            () -> {
              final var claimsJws =
                  Jwts.parser().keyLocator(keyLocator).build().parseSignedClaims(token);
              return new JwtToken(claimsJws.getHeader(), claimsJws.getPayload());
            })
        .handle(
            (jwtToken, ex) -> {
              if (jwtToken != null) {
                if (LOGGER.isDebugEnabled()) {
                  LOGGER.debug("Resolved token: {}", mask(token));
                }
                return jwtToken;
              }
              if (ex != null) {
                if (ex instanceof JwtTokenException) {
                  throw (JwtTokenException) ex;
                } else {
                  throw new JwtTokenException("Failed to resolve token: " + mask(token), ex);
                }
              }
              return null;
            });
  }

  private static String mask(String data) {
    if (data == null || data.length() < 5) {
      return "*****";
    }
    return data.replace(data.substring(2, data.length() - 2), "***");
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy