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();
}
}