diff --git a/identity-service/src/main/kotlin/tech/aaregall/lab/petclinic/identity/infrastructure/config/security/CustomIdTokenClaimsValidator.kt b/identity-service/src/main/kotlin/tech/aaregall/lab/petclinic/identity/infrastructure/config/security/CustomIdTokenClaimsValidator.kt new file mode 100644 index 0000000..6e6b556 --- /dev/null +++ b/identity-service/src/main/kotlin/tech/aaregall/lab/petclinic/identity/infrastructure/config/security/CustomIdTokenClaimsValidator.kt @@ -0,0 +1,30 @@ +package tech.aaregall.lab.petclinic.identity.infrastructure.config.security + +import io.micronaut.context.annotation.Replaces +import io.micronaut.security.oauth2.client.IdTokenClaimsValidator +import io.micronaut.security.oauth2.configuration.OauthClientConfiguration +import io.micronaut.security.token.Claims +import jakarta.inject.Singleton + +/** + * Custom claim validator to not restrict azp to clientId + * See https://github.com/micronaut-projects/micronaut-security/issues/1543 + */ +@Singleton +@Replaces(IdTokenClaimsValidator::class) +class CustomIdTokenClaimsValidator(oauthClientConfigurations: Collection): IdTokenClaimsValidator(oauthClientConfigurations) { + + override fun validateAzp(claims: Claims, clientId: String, audiences: MutableList): Boolean { + if (audiences.size < 2) { + return true + } + return parseAzpClaim(claims) + .map { audiences.containsIgnoreCase(it) } + .orElse(false) + } + +} + +private fun List.containsIgnoreCase(element: String): Boolean { + return this.any { it.equals(element, ignoreCase = true) } +} \ No newline at end of file diff --git a/identity-service/src/main/resources/application-dev.yml b/identity-service/src/main/resources/application-dev.yml index c33c877..ec6e92c 100644 --- a/identity-service/src/main/resources/application-dev.yml +++ b/identity-service/src/main/resources/application-dev.yml @@ -5,10 +5,6 @@ micronaut: keycloak: openid: issuer: 'http://localhost:8082/realms/petclinic' - token: - jwt: - claims-validators: - openid-idtoken: false # until feedback from https://github.com/micronaut-projects/micronaut-security/issues/1543 datasources: default: