Search in sources :

Example 1 with SigningKey

use of oidc.model.SigningKey in project OpenConext-oidcng by OpenConext.

the class KeyRolloverTest method rolloverSymmetricKeys.

@Test
public void rolloverSymmetricKeys() throws GeneralSecurityException, IOException {
    resetAndCreateSymmetricKeys(3);
    List<SymmetricKey> symmetricKeys = mongoTemplate.findAll(SymmetricKey.class);
    assertEquals(3, symmetricKeys.size());
    List<SigningKey> signingKeys = IntStream.rangeClosed(0, 5).mapToObj(i -> new SigningKey("key_" + i, symmetricKeys.get(0).getKeyId(), "jwk", new Date())).collect(toList());
    mongoTemplate.bulkOps(BulkOperations.BulkMode.ORDERED, SigningKey.class).remove(new Query()).insert(signingKeys).execute();
    KeyRollover keyRollover = new KeyRollover(tokenGenerator, mongoTemplate, true, sequenceRepository);
    keyRollover.doSymmetricKeyRollover();
    List<String> keyIds = mongoTemplate.findAll(SymmetricKey.class).stream().map(SymmetricKey::getKeyId).sorted().collect(toList());
    assertEquals(Arrays.asList(symmetricKeys.get(0).getKeyId(), sequenceRepository.currentSymmetricKeyId()).stream().sorted().collect(toList()), keyIds);
    mongoTemplate.bulkOps(BulkOperations.BulkMode.ORDERED, SigningKey.class).remove(new Query()).execute();
}
Also used : IntStream(java.util.stream.IntStream) Arrays(java.util.Arrays) BulkOperations(org.springframework.data.mongodb.core.BulkOperations) Date(java.util.Date) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) IOException(java.io.IOException) Query(org.springframework.data.mongodb.core.query.Query) AccessToken(oidc.model.AccessToken) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) GeneralSecurityException(java.security.GeneralSecurityException) SigningKey(oidc.model.SigningKey) Assert.assertFalse(org.junit.Assert.assertFalse) ParseException(java.text.ParseException) SymmetricKey(oidc.model.SymmetricKey) Assert.assertEquals(org.junit.Assert.assertEquals) AbstractIntegrationTest(oidc.AbstractIntegrationTest) SeedUtils(oidc.SeedUtils) RefreshToken(oidc.model.RefreshToken) Query(org.springframework.data.mongodb.core.query.Query) SigningKey(oidc.model.SigningKey) SymmetricKey(oidc.model.SymmetricKey) Date(java.util.Date) Test(org.junit.Test) AbstractIntegrationTest(oidc.AbstractIntegrationTest)

Example 2 with SigningKey

use of oidc.model.SigningKey in project OpenConext-oidcng by OpenConext.

the class KeyRolloverTest method rolloverSigningKeys.

@Test
public void rolloverSigningKeys() throws GeneralSecurityException, ParseException, IOException {
    resetAndCreateSigningKeys(3);
    final List<String> signingKeys = mongoTemplate.findAll(SigningKey.class).stream().map(SigningKey::getKeyId).sorted().collect(toList());
    assertEquals(3, signingKeys.size());
    List<AccessToken> tokens = IntStream.rangeClosed(0, 10).mapToObj(i -> accessToken("val" + i, signingKeys.get(i % 2))).collect(toList());
    mongoTemplate.bulkOps(BulkOperations.BulkMode.ORDERED, AccessToken.class).remove(new Query()).insert(tokens).execute();
    KeyRollover keyRollover = new KeyRollover(tokenGenerator, mongoTemplate, true, sequenceRepository);
    keyRollover.rollover();
    List<String> keys = mongoTemplate.findAll(SigningKey.class).stream().map(SigningKey::getKeyId).sorted().collect(toList());
    // would expect 4, but one signing key is cleaned up as it is not used in
    assertEquals(3, keys.size());
}
Also used : IntStream(java.util.stream.IntStream) Arrays(java.util.Arrays) BulkOperations(org.springframework.data.mongodb.core.BulkOperations) Date(java.util.Date) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) IOException(java.io.IOException) Query(org.springframework.data.mongodb.core.query.Query) AccessToken(oidc.model.AccessToken) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) GeneralSecurityException(java.security.GeneralSecurityException) SigningKey(oidc.model.SigningKey) Assert.assertFalse(org.junit.Assert.assertFalse) ParseException(java.text.ParseException) SymmetricKey(oidc.model.SymmetricKey) Assert.assertEquals(org.junit.Assert.assertEquals) AbstractIntegrationTest(oidc.AbstractIntegrationTest) SeedUtils(oidc.SeedUtils) RefreshToken(oidc.model.RefreshToken) Query(org.springframework.data.mongodb.core.query.Query) AccessToken(oidc.model.AccessToken) SigningKey(oidc.model.SigningKey) Test(org.junit.Test) AbstractIntegrationTest(oidc.AbstractIntegrationTest)

Example 3 with SigningKey

use of oidc.model.SigningKey in project OpenConext-oidcng by OpenConext.

the class TokenGeneratorTest method rolloverSigningKeys.

@Test
public void rolloverSigningKeys() throws GeneralSecurityException, ParseException, IOException {
    resetAndCreateSigningKeys(3);
    SigningKey signingKey = signingKeyRepository.findAllByOrderByCreatedDesc().get(0);
    assertTrue(signingKey.getKeyId().startsWith(currentSigningKeyIdPrefix()));
}
Also used : SigningKey(oidc.model.SigningKey) AbstractIntegrationTest(oidc.AbstractIntegrationTest) Test(org.junit.Test)

Example 4 with SigningKey

use of oidc.model.SigningKey in project OpenConext-oidcng by OpenConext.

the class KeyRollover method cleanUpSigningKeys.

public List<String> cleanUpSigningKeys() {
    List<String> signingKeyValues = mongoTemplate.findDistinct("signingKeyId", AccessToken.class, String.class);
    List<String> signingKeyValuesRefreshToken = mongoTemplate.findDistinct("signingKeyId", RefreshToken.class, String.class);
    signingKeyValues.addAll(signingKeyValuesRefreshToken);
    signingKeyValues.add(String.format("key_%s", sequenceRepository.currentSigningKeyId()));
    Query query = Query.query(Criteria.where("keyId").not().in(signingKeyValues));
    List<SigningKey> signingKeys = mongoTemplate.findAllAndRemove(query, SigningKey.class);
    List<String> deleted = signingKeys.stream().map(SigningKey::getKeyId).collect(Collectors.toList());
    LOG.info("Deleted signing keys that are no longer referenced by access_tokens and refresh_token: " + String.join(", ", deleted));
    return deleted;
}
Also used : Query(org.springframework.data.mongodb.core.query.Query) SigningKey(oidc.model.SigningKey)

Example 5 with SigningKey

use of oidc.model.SigningKey in project OpenConext-oidcng by OpenConext.

the class KeyRollover method doSigningKeyRollover.

public List<String> doSigningKeyRollover() {
    try {
        SigningKey signingKey = tokenGenerator.rolloverSigningKeys();
        LOG.info("Successful signing key rollover. New signing key: " + signingKey.getKeyId());
        return cleanUpSigningKeys();
    } catch (Exception e) {
        LOG.error("Rollover exception", e);
        return Collections.emptyList();
    }
}
Also used : SigningKey(oidc.model.SigningKey)

Aggregations

SigningKey (oidc.model.SigningKey)8 AbstractIntegrationTest (oidc.AbstractIntegrationTest)5 Test (org.junit.Test)5 Query (org.springframework.data.mongodb.core.query.Query)5 RefreshToken (oidc.model.RefreshToken)3 IOException (java.io.IOException)2 GeneralSecurityException (java.security.GeneralSecurityException)2 ParseException (java.text.ParseException)2 Arrays (java.util.Arrays)2 Date (java.util.Date)2 List (java.util.List)2 Collectors.toList (java.util.stream.Collectors.toList)2 IntStream (java.util.stream.IntStream)2 SeedUtils (oidc.SeedUtils)2 AccessToken (oidc.model.AccessToken)2 SymmetricKey (oidc.model.SymmetricKey)2 Assert.assertEquals (org.junit.Assert.assertEquals)2 Assert.assertFalse (org.junit.Assert.assertFalse)2 Assert.assertTrue (org.junit.Assert.assertTrue)2 BulkOperations (org.springframework.data.mongodb.core.BulkOperations)2