【问题标题】:Allow console application to access Windows Authenticated web app允许控制台应用程序访问 Windows Authenticated Web 应用程序
【发布时间】:2015-08-24 12:37:19
【问题描述】:

我有一个使用 Windows 身份验证的 MVC Web 应用程序。所以我们做System.Web.HttpContext.Current.User.Identity.Name

之类的事情

现在我正在编写一个控制台应用程序,它将作为批处理作业的一部分运行。这个控制台应用程序需要做的就是在主 Web 应用程序中调用 ActionResult,然后它会执行一些维护任务。

现在,由于控制台应用在域控制器/Active Directory 中没有身份,因此使用 System.Net.WebClient().DownloadString() 的调用会不断抛出 401 错误。

我的问题是,有没有办法允许此应用程序在主 Web 应用程序中调用此链接,而不必在 web.config/IIS 中禁用 WindowsAuthentication?

欢迎任何想法/建议。

所有控制台应用程序包含的是

static void Main(string[] args)
        {
            try
            {
                new System.Net.WebClient().DownloadString(System.Configuration.ConfigurationSettings.AppSettings["http://foo.com/"]);
            }
            catch
            {

            }
        }

【问题讨论】:

  • 您将其作为批处理作业运行,这是否意味着计划任务?如果是这样,您使用什么凭据来运行它。它是应该有权访问您的 MVC 帐户的域帐户吗?
  • 是的,它在服务器上作为计划任务运行。它使用什么帐户并不重要。它所需要的只是能够调用该 url。
  • 如果您尝试访问的网页使用 Windows 身份验证,那么您的控制台应用程序在什么凭据下运行绝对重要。
  • 另外,请发布更完整的代码示例,说明您的应用如何创建和执行 HTTP 请求。
  • @MikeC 添加了客户端代码。它只有 1 行代码。这就是它真正需要的一切。

标签: c# asp.net asp.net-mvc iis asp.net-web-api


【解决方案1】:

使用 UseDefaultCredentials:

        var client = new WebClient
                     {
                         UseDefaultCredentials = true
                     };
        client.DownloadString(address);

这将使用控制台应用程序的运行方式(可以在计划任务设置中指定)。

【讨论】:

  • 工作就像一个魅力。谢谢。
  • 作为忠告:这在 Windows 服务中使用时不太可能工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 2014-02-02
  • 2018-06-10
  • 2017-11-10
相关资源
最近更新 更多