private AthenzAccessToken createAccessToken(AccessTokenCacheKey cacheKey) {
        List<AthenzRole> roles = Optional.ofNullable(cacheKey.roles()).orElse(List.of());
        List<AthenzIdentity> proxyPrincipals = Optional.ofNullable(cacheKey.proxyPrincipals()).orElse(List.of());
        try (ZtsClient client = createZtsClient()) {
            if (roles.isEmpty()) {
                return client.getAccessToken(cacheKey.domain(), proxyPrincipals);
            } else {
                return client.getAccessToken(roles, proxyPrincipals);
            }
        }
    }
A {@link AthenzIdentityProvider} / {@link ServiceIdentityProvider} component that provides the tenant identity.

@author mortent
@author bjorncs
vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identityprovider/client/AthenzIdentityProviderImpl.java