static AccessTokenCacheKey from(String domain, List<String> roles, List<String> proxyPrincipals) {
            List<AthenzRole> roleList = Optional.ofNullable(roles).orElse(List.of()).stream()
                    .map(roleName -> new AthenzRole(domain, roleName))
                    .toList();
            List<AthenzIdentity> proxyPrincipalList = Optional.ofNullable(proxyPrincipals).orElse(List.of()).stream()
                    .map(AthenzIdentities::from)
                    .toList();
            return new AccessTokenCacheKey(new AthenzDomain(domain), roleList, proxyPrincipalList);
        }
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