Skip to content

Commit 980b81e

Browse files
committed
ATO-2559: Use feature flag in PrivateKeyJwtClientAuthValidator
1 parent b813e96 commit 980b81e

3 files changed

Lines changed: 18 additions & 7 deletions

File tree

orchestration-shared/src/main/java/uk/gov/di/orchestration/shared/validation/PrivateKeyJwtClientAuthValidator.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import uk.gov.di.orchestration.shared.exceptions.TokenAuthInvalidException;
1616
import uk.gov.di.orchestration.shared.helpers.NowHelper;
1717
import uk.gov.di.orchestration.shared.services.ClientSignatureValidationService;
18+
import uk.gov.di.orchestration.shared.services.ConfigurationService;
1819
import uk.gov.di.orchestration.shared.services.DynamoClientService;
1920

2021
import java.util.Date;
@@ -24,17 +25,21 @@
2425
import static uk.gov.di.orchestration.shared.helpers.InstrumentationHelper.addAnnotation;
2526
import static uk.gov.di.orchestration.shared.helpers.LogLineHelper.LogFieldName.CLIENT_ID;
2627
import static uk.gov.di.orchestration.shared.helpers.LogLineHelper.attachLogFieldToLogs;
28+
import static uk.gov.di.orchestration.shared.utils.ClientUtils.getTokenAuthMethodOrDefault;
2729

2830
public class PrivateKeyJwtClientAuthValidator extends TokenClientAuthValidator {
2931

3032
private final ClientSignatureValidationService clientSignatureValidationService;
33+
private final ConfigurationService configurationService;
3134
private static final String UNKNOWN_CLIENT_ID = "unknown";
3235

3336
public PrivateKeyJwtClientAuthValidator(
3437
DynamoClientService dynamoClientService,
35-
ClientSignatureValidationService clientSignatureValidationService) {
38+
ClientSignatureValidationService clientSignatureValidationService,
39+
ConfigurationService configurationService) {
3640
super(dynamoClientService);
3741
this.clientSignatureValidationService = clientSignatureValidationService;
42+
this.configurationService = configurationService;
3843
}
3944

4045
@Override
@@ -51,10 +56,10 @@ public ClientRegistry validateTokenAuthAndReturnClientRegistryIfValid(
5156
var clientRegistry = getClientRegistryFromTokenAuth(privateKeyJWT.getClientID());
5257
attachLogFieldToLogs(CLIENT_ID, clientRegistry.getClientID());
5358
addAnnotation("client_id", clientRegistry.getClientID());
54-
if (Objects.nonNull(clientRegistry.getTokenAuthMethod())
55-
&& !clientRegistry
56-
.getTokenAuthMethod()
57-
.equals(ClientAuthenticationMethod.PRIVATE_KEY_JWT.getValue())) {
59+
var tokenAuthMethod = getTokenAuthMethodOrDefault(clientRegistry, configurationService);
60+
if (Objects.nonNull(tokenAuthMethod)
61+
&& !tokenAuthMethod.equals(
62+
ClientAuthenticationMethod.PRIVATE_KEY_JWT.getValue())) {
5863
LOG.warn("Client is not registered to use private_key_jwt");
5964
throw new TokenAuthInvalidException(
6065
new ErrorObject(

orchestration-shared/src/main/java/uk/gov/di/orchestration/shared/validation/TokenClientAuthValidatorFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ public Optional<TokenClientAuthValidator> getTokenAuthenticationValidator(
3535
checkAssertionType(requestBody);
3636
return Optional.of(
3737
new PrivateKeyJwtClientAuthValidator(
38-
dynamoClientService, clientSignatureValidationService));
38+
dynamoClientService,
39+
clientSignatureValidationService,
40+
configurationService));
3941
}
4042

4143
if (requestBody.containsKey("client_secret") && requestBody.containsKey("client_id")) {

orchestration-shared/src/test/java/uk/gov/di/orchestration/shared/validation/PrivateKeyJwtClientAuthValidatorTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import uk.gov.di.orchestration.shared.exceptions.TokenAuthInvalidException;
2222
import uk.gov.di.orchestration.shared.helpers.NowHelper;
2323
import uk.gov.di.orchestration.shared.services.ClientSignatureValidationService;
24+
import uk.gov.di.orchestration.shared.services.ConfigurationService;
2425
import uk.gov.di.orchestration.shared.services.DynamoClientService;
2526

2627
import java.net.URI;
@@ -46,6 +47,7 @@ class PrivateKeyJwtClientAuthValidatorTest {
4647
private final DynamoClientService dynamoClientService = mock(DynamoClientService.class);
4748
private final ClientSignatureValidationService clientSignatureValidationService =
4849
mock(ClientSignatureValidationService.class);
50+
private final ConfigurationService configurationService = mock(ConfigurationService.class);
4951
private OidcAPI oidcAPI = mock(OidcAPI.class);
5052
private static final URI OIDC_TOKEN_URL = URI.create("https://example.com/token");
5153
private static final ClientID CLIENT_ID = new ClientID();
@@ -57,7 +59,9 @@ void setUp() {
5759
when(oidcAPI.tokenURI()).thenReturn(OIDC_TOKEN_URL);
5860
privateKeyJwtClientAuthValidator =
5961
new PrivateKeyJwtClientAuthValidator(
60-
dynamoClientService, clientSignatureValidationService);
62+
dynamoClientService,
63+
clientSignatureValidationService,
64+
configurationService);
6165
}
6266

6367
private static Stream<JWSAlgorithm> supportedAlgorithms() {

0 commit comments

Comments
 (0)