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

com.trimble.id.ValidatedClaimsetProvider Maven / Gradle / Ivy

Go to download

Trimble Identity OAuth Client library holds the client classes that are used for communicating with Trimble Identity Service

The newest version!
package com.trimble.id;

import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWSVerifier;
import com.nimbusds.jose.crypto.RSASSAVerifier;
import com.nimbusds.jose.jwk.JWK;
import com.nimbusds.jose.jwk.RSAKey;
import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.SignedJWT;
import com.trimble.id.analytics.AnalyticsHttpClient;

import static com.trimble.id.AuthenticationConstants.SDK_VARIANT;
import static com.trimble.id.AuthenticationConstants.SDK_VERSION;

import java.text.ParseException;
import java.util.concurrent.CompletableFuture;

/** A claimset provider that returns a validated claimset */
public class ValidatedClaimsetProvider implements IClaimsetProvider {
	private IKeysetProvider keysetProvider;

	/**
	 * Public constructor of ValidatedClaimsetProvider
	 * 
	 * @param keysetProvider A provider for the keyset used to validate the JWT claimeset
	 */
	public ValidatedClaimsetProvider(IKeysetProvider keysetProvider) {
		this.keysetProvider = keysetProvider;

		AnalyticsHttpClient.sendInitEvent(this.getClass().getSimpleName(), this.getClass().getPackage().getName(), SDK_VERSION);
	}

	/**
	 * Get the claimset
	 * 
	 * @param token The token to be validated
	 * @return A CompletableFuture that contains the validated claimset
	 */
	@Override
	public CompletableFuture retrieveClaimset(String token) {

		AnalyticsHttpClient.sendMethodEvent("retrieveClaimset", SDK_VARIANT, this.getClass().getPackage().getName(), SDK_VERSION);

		return this.keysetProvider.retrieveKeyset().thenApply((keyset) -> {

			try {

				SignedJWT signedJwt = SignedJWT.parse(token);
				String kid = signedJwt.getHeader().getKeyID();
				JWK key = keyset.getKeyByKeyId(kid);
				JWSVerifier verifier = new RSASSAVerifier((RSAKey) key);

				if (signedJwt.verify(verifier))
					return signedJwt.getJWTClaimsSet();

			} catch (ParseException | JOSEException e) {
				AnalyticsHttpClient.sendExceptionEvent("retrieveClaimset", SDK_VARIANT, this.getClass().getPackage().getName(), SDK_VERSION, e.getMessage());
				throw new SDKClientException(e, e.getCause(), e.getMessage());
			}
			return null;
		});
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy