docs: public boolean isValid(final String expectedAudience, final String expectedIssuer, final long timeDrift) {
          if (!this.audience.equalsIgnoreCase(expectedAudience)) {
              LOGGER.warn("Audience [{}] is invalid where the expected audience should be [{}]", this.audience, expectedAudience);
              return false;
          }
          if (!this.issuer.equalsIgnoreCase(expectedIssuer)) {
              LOGGER.warn("Issuer [{}] is invalid since the expected issuer should be [{}]", this.issuer, expectedIssuer);
              return false;
          }
          val retrievedOnTimeDrift = this.getRetrievedOn().minus(timeDrift, ChronoUnit.MILLIS);
          if (this.issuedOn.isBefore(retrievedOnTimeDrift)) {
              LOGGER.warn("Ticket is issued before the allowed drift. Issued on [{}] while allowed drift is [{}]", this.issuedOn, retrievedOnTimeDrift);
              return false;
          }
          val retrievedOnTimeAfterDrift = this.retrievedOn.plus(timeDrift, ChronoUnit.MILLIS);
          if (this.issuedOn.isAfter(retrievedOnTimeAfterDrift)) {
              LOGGER.warn("Ticket is issued after the allowed drift. Issued on [{}] while allowed drift is [{}]", this.issuedOn, retrievedOnTimeAfterDrift);
              return false;
          }
          if (this.retrievedOn.isAfter(this.notOnOrAfter)) {
              LOGGER.warn("Ticket is too late because it's retrieved on [{}] which is after [{}].", this.retrievedOn, this.notOnOrAfter);
              return false;
          }
          LOGGER.debug("WsFed Credential is validated for [{}] and [{}].", expectedAudience, expectedIssuer);
          return true;
      }