【问题标题】:Use App Pool Credentials for WebClient Request为 WebClient 请求使用应用程序池凭据
【发布时间】:2015-11-09 17:52:47
【问题描述】:

我想使用应用程序池凭据来避免来自 Web API 方法的双跳问题。但是,我不希望模拟所有请求,而只模拟这一特定请求。代码目前看起来像这样:

[Route("api/mycontroller/mymethod")]
public string GetDataFromOtherInternalSystem(int id)
{
  var client = new WebClient ( Credentials = CredentialCache.DefaultNetworkCredentials);

return client.DownloadString('http://internaldomain/api/method/id')

}

根据我对MSDN 的了解,用户上下文是该浏览器会话的登录用户(即我的帐户通过 Active Directory 而不是应用程序池的帐户)。

DefaultNetworkCredentials 返回的凭据代表 当前安全上下文的身份验证凭据,其中 应用程序正在运行。对于客户端应用程序,这些是 通常是 Windows 凭据(用户名、密码和域) 运行应用程序的用户。对于 ASP.NET 应用程序, 默认网络凭据是登录的用户凭据 用户,或被冒充的用户。

这会产生双跳问题,如果请求完全来自作为服务帐户的 Web 应用程序(无需我即时构建凭据),则可以消除该问题。

关于如何在不指定用户凭据的情况下模拟应用程序池的任何想法如下:

var cred = new NetworkCredential("myusername", "mypassword")

我再次尝试避免为 Kerberos 或 CORS 正确设置其他 Web 服务。

【问题讨论】:

  • 您是否尝试过使用 WebClient 调用而不指定任何凭据并设置 client.UseDefaultCredentials = true;
  • 这篇 SO 帖子有帮助吗? stackoverflow.com/questions/3891260/…
  • UseDefaultCredentials 不起作用。这是来自 MSDN 的文档:“DefaultNetworkCredentials 返回的凭据表示应用程序正在运行的当前安全上下文的身份验证凭据。对于客户端应用程序,这些通常是 Windows 凭据(用户名、密码和域) 运行应用程序的用户。对于 ASP.NET 应用程序,默认网络凭据是登录用户或被模拟用户的用户凭据。"
  • 根据我的经验,每次我通过Task.Factory.StartNew创建一个新任务时,该任务都会以应用程序池用户的身份运行。

标签: c# .net security asp.net-web-api


【解决方案1】:

这可以通过将空指针 (IntPtr.Zero) 传递给 WindowsIdentity 类的静态 Impersonate 方法来实现。这是MSDN document for the Impersonate method中的描述:

使用 userToken 值为零调用 Impersonate(IntPtr) 方法等效于调用 Win32 RevertToSelf 函数。如果当前正在模拟其他用户,则控制权将恢复到原始用户。

用法如下所示:

using (var impersonationContext = WindowsIdentity.Impersonate(IntPtr.Zero))
{
    try
    {
        // this code is now using the application pool indentity
    }
    finally
    {
        if (impersonationContext != null)
        {
            impersonationContext.Undo();
        }
    }
}

【讨论】:

  • 这正是我想要的!我试过了,效果很好!
  • 谢谢!!!!在过去的几天里,我一直在敲击键盘,试图弄清楚为什么我的代码可以通过单元测试工作,而不是来自真正的浏览器请求。
猜你喜欢
  • 2016-02-12
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
相关资源
最近更新 更多