code: public boolean verify(IdToken idToken) {
      return (issuers == null || idToken.verifyIssuer(issuers))
          && (audience == null || idToken.verifyAudience(audience))
          && idToken.verifyTime(clock.currentTimeMillis(), acceptableTimeSkewSeconds);
    }
docs: Verifies that the given ID token is valid using the cached public keys.
  
  It verifies:
  
  <ul>
  <li>The issuer is one of {@link #getIssuers()} by calling {@link
  IdToken#verifyIssuer(String)}.</li>
  <li>The audience is one of {@link #getAudience()} by calling
  {@link IdToken#verifyAudience(Collection)}.</li>
  <li>The current time against the issued at and expiration time, using the {@link #getClock()}
  and allowing for a time skew specified in {@link #getAcceptableTimeSkewSeconds()} , by
  calling {@link IdToken#verifyTime(long, long)}.</li>
  </ul>
  
  <p>
  Overriding is allowed, but it must call the super implementation.
  </p>
  
  @param idToken ID token
  @return {@code true} if verified successfully or {@code false} if failed