org.keycloak.RSATokenVerifier Maven / Gradle / Ivy
package org.keycloak;
import org.keycloak.jose.jws.JWSInput;
import org.keycloak.jose.jws.crypto.RSAProvider;
import org.keycloak.representations.SkeletonKeyToken;
import java.io.IOException;
import java.security.PublicKey;
/**
* @author Bill Burke
* @version $Revision: 1 $
*/
public class RSATokenVerifier {
public static SkeletonKeyToken verifyToken(String tokenString, PublicKey realmKey, String realm) throws VerificationException {
JWSInput input = new JWSInput(tokenString);
boolean verified = false;
try {
verified = RSAProvider.verify(input, realmKey);
} catch (Exception ignore) {
}
if (!verified) throw new VerificationException("Token signature not validated");
SkeletonKeyToken token = null;
try {
token = input.readJsonContent(SkeletonKeyToken.class);
} catch (IOException e) {
throw new VerificationException(e);
}
if (!token.isActive()) {
throw new VerificationException("Token is not active.");
}
String user = token.getSubject();
if (user == null) {
throw new VerificationException("Token user was null");
}
if (!realm.equals(token.getAudience())) {
throw new VerificationException("Token audience doesn't match domain");
}
return token;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy