use of org.apereo.cas.oidc.jwks.OidcJsonWebKeyCacheKey in project cas by apereo.
the class OidcJwtAccessTokenCipherExecutor method getJsonWebKeyFor.
private Optional<JsonWebKeySet> getJsonWebKeyFor(final OidcJsonWebKeyUsage usage) {
val issuer = oidcIssuerService.determineIssuer(Optional.empty());
LOGGER.trace("Determined issuer [{}] to fetch the JSON web key", issuer);
return Objects.requireNonNull(defaultJsonWebKeystoreCache.get(new OidcJsonWebKeyCacheKey(issuer, usage)));
}
use of org.apereo.cas.oidc.jwks.OidcJsonWebKeyCacheKey in project cas by apereo.
the class OidcPrivateKeyJwtAuthenticatorTests method verifyAction.
@Test
public void verifyAction() throws Exception {
val auth = new OidcPrivateKeyJwtAuthenticator(servicesManager, registeredServiceAccessStrategyEnforcer, ticketRegistry, webApplicationServiceFactory, casProperties, applicationContext);
val request = new MockHttpServletRequest();
val response = new MockHttpServletResponse();
val context = new JEEContext(request, response);
val audience = casProperties.getServer().getPrefix().concat('/' + OidcConstants.BASE_OIDC_URL + '/' + OidcConstants.ACCESS_TOKEN_URL);
val registeredService = getOidcRegisteredService();
registeredService.setClientId(UUID.randomUUID().toString());
val file = File.createTempFile("jwks-service", ".jwks");
val core = casProperties.getAuthn().getOidc().getJwks().getCore();
val jsonWebKey = OidcJsonWebKeyStoreUtils.generateJsonWebKey(core.getJwksType(), core.getJwksKeySize(), OidcJsonWebKeyUsage.SIGNING);
jsonWebKey.setKeyId("cas-kid");
val jsonWebKeySet = new JsonWebKeySet(jsonWebKey);
val data = jsonWebKeySet.toJson(JsonWebKey.OutputControlLevel.INCLUDE_PRIVATE);
FileUtils.write(file, data, StandardCharsets.UTF_8);
registeredService.setJwks("file://" + file.getAbsolutePath());
servicesManager.save(registeredService);
val claims = getClaims(registeredService.getClientId(), registeredService.getClientId(), registeredService.getClientId(), audience);
val webKeys = oidcServiceJsonWebKeystoreCache.get(new OidcJsonWebKeyCacheKey(registeredService, OidcJsonWebKeyUsage.SIGNING)).get();
val key = (PublicJsonWebKey) webKeys.getJsonWebKeys().get(0);
val jwt = EncodingUtils.signJwsRSASha512(key.getPrivateKey(), claims.toJson().getBytes(StandardCharsets.UTF_8), Map.of());
val credentials = getCredential(request, OAuth20Constants.CLIENT_ASSERTION_TYPE_JWT_BEARER, new String(jwt, StandardCharsets.UTF_8), registeredService.getClientId());
auth.validate(credentials, context, JEESessionStore.INSTANCE);
assertNotNull(credentials.getUserProfile());
}
Aggregations