Skip to content

Commit 0041ec2

Browse files
authored
Merge pull request #1549 from alphagov/auth-1177-sign-token-using-new-key-alias
AUTH-1177: Sign token with new key id
2 parents 70d38c5 + b2661f2 commit 0041ec2

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

shared/src/main/java/uk/gov/di/authentication/shared/services/TokenService.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package uk.gov.di.authentication.shared.services;
22

3+
import com.amazonaws.services.kms.model.GetPublicKeyRequest;
34
import com.amazonaws.services.kms.model.SignRequest;
45
import com.amazonaws.services.kms.model.SignResult;
56
import com.amazonaws.services.kms.model.SigningAlgorithmSpec;
@@ -67,6 +68,7 @@
6768
import java.util.stream.Collectors;
6869

6970
import static uk.gov.di.authentication.shared.helpers.ConstructUriHelper.buildURI;
71+
import static uk.gov.di.authentication.shared.helpers.HashHelper.hashSha256String;
7072

7173
public class TokenService {
7274

@@ -373,10 +375,18 @@ private RefreshToken generateAndStoreRefreshToken(
373375
}
374376

375377
private SignedJWT generateSignedJWT(JWTClaimsSet claimsSet) {
378+
379+
var signingKeyId =
380+
kmsConnectionService
381+
.getPublicKey(
382+
new GetPublicKeyRequest()
383+
.withKeyId(configService.getTokenSigningKeyAlias()))
384+
.getKeyId();
385+
376386
try {
377387
JWSHeader jwsHeader =
378388
new JWSHeader.Builder(TOKEN_ALGORITHM)
379-
.keyID(configService.getTokenSigningKeyAlias())
389+
.keyID(hashSha256String(signingKeyId))
380390
.build();
381391
Base64URL encodedHeader = jwsHeader.toBase64URL();
382392
Base64URL encodedClaims = Base64URL.encode(claimsSet.toString());

shared/src/test/java/uk/gov/di/authentication/shared/services/TokenServiceTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package uk.gov.di.authentication.shared.services;
22

3+
import com.amazonaws.services.kms.model.GetPublicKeyRequest;
4+
import com.amazonaws.services.kms.model.GetPublicKeyResult;
35
import com.amazonaws.services.kms.model.SignRequest;
46
import com.amazonaws.services.kms.model.SignResult;
57
import com.fasterxml.jackson.core.JsonProcessingException;
68
import com.fasterxml.jackson.databind.ObjectMapper;
79
import com.nimbusds.jose.JOSEException;
810
import com.nimbusds.jose.JWSAlgorithm;
11+
import com.nimbusds.jose.JWSHeader;
912
import com.nimbusds.jose.crypto.ECDSASigner;
1013
import com.nimbusds.jose.crypto.impl.ECDSA;
1114
import com.nimbusds.jose.jwk.Curve;
@@ -65,6 +68,7 @@
6568
import static org.hamcrest.Matchers.equalTo;
6669
import static org.hamcrest.Matchers.hasItem;
6770
import static org.hamcrest.Matchers.not;
71+
import static org.hamcrest.core.Is.is;
6872
import static org.junit.jupiter.api.Assertions.assertNotNull;
6973
import static org.junit.jupiter.api.Assertions.assertNull;
7074
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -114,6 +118,9 @@ void setUp() {
114118
when(configurationService.getAccessTokenExpiry()).thenReturn(300L);
115119
when(configurationService.getIDTokenExpiry()).thenReturn(120L);
116120
when(configurationService.getSessionExpiry()).thenReturn(300L);
121+
when(kmsConnectionService.getPublicKey(any(GetPublicKeyRequest.class)))
122+
.thenReturn(new GetPublicKeyResult().withKeyId("789789789789789"));
123+
117124
nonce = new Nonce();
118125
}
119126

@@ -529,6 +536,13 @@ private void assertSuccessfullTokenResponse(OIDCTokenResponse tokenResponse)
529536
accessTokenKey,
530537
new ObjectMapper().writeValueAsString(accessTokenStore),
531538
300L);
539+
540+
var header = (JWSHeader) tokenResponse.getOIDCTokens().getIDToken().getHeader();
541+
542+
assertThat(
543+
header.getKeyID(),
544+
is("1d504aece298a14d74ee0a02b6740b4372a1fab4206778e486ba72770ff4beb8"));
545+
532546
assertThat(
533547
tokenResponse.getOIDCTokens().getIDToken().getJWTClaimsSet().getClaims().size(),
534548
equalTo(9));

0 commit comments

Comments
 (0)