private IPromise<AuthenticationSchemes> CheckAuthentication(Vault vault, bool async)
    {
      var result = new Promise<AuthenticationSchemes>();

      if (vault.Authentication == AuthenticationSchemes.None && _conn.Version >= 11)
      {
        var hReq = (HttpWebRequest)System.Net.WebRequest.Create(vault.Url);
        hReq.Credentials = null;
        hReq.UnsafeAuthenticatedConnectionSharing = true;
        hReq.Method = "HEAD";

        var req = new WebRequest(hReq, CompressionType.none);
        result.CancelTarget(
          req.Execute(async)
          .Progress((p, m) => result.Notify(p, m))
          .Done(r =>
          {
            vault.Authentication = AuthenticationSchemes.Anonymous;
            result.Resolve(vault.Authentication);
          }).Fail(ex =>
          {
            var webEx = ex as HttpException;
            if (webEx != null && webEx.Response.StatusCode == HttpStatusCode.Unauthorized)
            {
              vault.Authentication = req.CheckForNotAuthorized(webEx.Response);
              result.Resolve(vault.Authentication);
            }
            else
            {
              result.Reject(ex);
            }
          }));
      }
      else
      {
        result.Resolve(AuthenticationSchemes.Anonymous);
      }

      return result;
    }