code: public @CheckForNull Authentication authenticate(Queue.Task task) {
          if (Util.isOverridden(QueueItemAuthenticator.class, getClass(), "authenticate", Queue.Item.class)) {
              // Need a fake (unscheduled) item. All the other calls assume a BuildableItem but probably it does not matter.
              return authenticate(new Queue.WaitingItem(Calendar.getInstance(), task, Collections.<Action>emptyList()));
          } else {
              throw new AbstractMethodError("you must override at least one of the QueueItemAuthenticator.authenticate methods");
          }
      }
docs: Determines the identity in which the {@link hudson.model.Queue.Executable} will run as.
  The default implementation delegates to {@link #authenticate(hudson.model.Queue.Item)} (there will be no associated actions).
  @param task
  Often {@link AbstractProject}.
  
  @return
  returning non-null will determine the identity. If null is returned, the next
  configured {@link QueueItemAuthenticator} will be given a chance to authenticate
  the executor. If everything fails, fall back to {@link Task#getDefaultAuthentication()}.
  @since 1.560