public TokenDeserializationResult deserialize()

in library/src/main/java/org/apache/fineract/cn/anubis/token/TenantRefreshTokenSerializer.java [113:155]


  public TokenDeserializationResult deserialize(final TenantApplicationRsaKeyProvider tenantRsaKeyProvider, final String refreshToken)
  {
    final Optional<String> tokenString = getJwtTokenString(refreshToken);

    final String token = tokenString.orElseThrow(AmitAuthenticationException::invalidToken);


    try {
      final JwtParser parser = Jwts.parser().setSigningKeyResolver(new SigningKeyResolver() {
        @Override public Key resolveSigningKey(final JwsHeader header, final Claims claims) {
          final String keyTimestamp = getKeyTimestampFromClaims(claims);
          final String issuingApplication = getIssuingApplicationFromClaims(claims);

          try {
            return tenantRsaKeyProvider.getApplicationPublicKey(issuingApplication, keyTimestamp);
          }
          catch (final IllegalArgumentException e)
          {
            throw AmitAuthenticationException.missingTenant();
          }
          catch (final InvalidKeyTimestampException e)
          {
            throw AmitAuthenticationException.invalidTokenKeyTimestamp(TokenType.TENANT.getIssuer(), keyTimestamp);
          }
        }

        @Override public Key resolveSigningKey(final JwsHeader header, final String plaintext) {
          return null;
        }
      });

      @SuppressWarnings("unchecked") Jwt<Header, Claims> jwt = parser.parse(token);

      return new TokenDeserializationResult(
              jwt.getBody().getSubject(),
              jwt.getBody().getExpiration(),
              jwt.getBody().getIssuer(),
              jwt.getBody().get(TokenConstants.JWT_ENDPOINT_SET_CLAIM, String.class));
    }
    catch (final JwtException e) {
      throw AmitAuthenticationException.invalidToken();
    }
  }