对WebClient请求使用应用程序池凭据

布莱克·布莱克威尔

我想使用应用程序池凭据来避免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服务。

Y

这可以通过将空指针(IntPtr.Zero)传递给WindowsIdentity类的静态Impersonate方法来实现。这是在MSDN文档中针对Impersonate方法的描述方式

用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();
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CredentialCache.DefaultCredentials不使用dotnet core 2.2的IIS应用程序池凭据

来自分类Dev

IIS应用程序池登录凭据停止.net Core

来自分类Dev

使用ThreadPoolExecutor应用程序的ExecutorChannel的池大小是否在请求范围内

来自分类Dev

在请求之间共享应用程序线程池

来自分类Dev

在C#控制台应用程序app.config中嵌入Webclient的凭据?

来自分类Dev

什么是应用程序池?

来自分类Dev

使用Facebook凭据登录我的应用程序

来自分类Dev

iis应用程序池与umbraco过度使用内存

来自分类Dev

使用强制选项在Powershell中创建应用程序池

来自分类Dev

获取应用程序池的内存使用情况

来自分类Dev

使用应用程序池帐户从MVC应用程序连接到WebAPI

来自分类Dev

应用程序池为每个请求创建多个会话?如何杀死IIS会话?

来自分类Dev

IIS 7.5应用程序池在首次请求网页时停止

来自分类Dev

在WPF应用程序中加密凭据

来自分类Dev

PHP应用程序中的Guzzle池

来自分类Dev

获取应用程序池的标识

来自分类Dev

IIS应用程序池,内存管理

来自分类Dev

应用程序池存储在哪里

来自分类Dev

IISExpress应用程序池回收

来自分类Dev

当前应用程序池名称

来自分类Dev

检查IIS应用程序池的状态

来自分类Dev

应用程序池存储在哪里

来自分类Dev

当前应用程序池名称

来自分类Dev

通过应用程序池隔离进程

来自分类Dev

跟踪应用程序池用户帐户

来自分类Dev

如何在Google API中使用Web应用程序生成的令牌填充本机应用程序凭据?

来自分类Dev

是否可以将虚拟应用程序配置为在Azure Web应用程序中使用单独的应用程序池?

来自分类Dev

使用AspNetCoreModuleV2使用同一应用程序池托管多个.net核心

来自分类Dev

Flask应用程序在使用线程池(使用UWSGI)时无法正常工作

Related 相关文章

  1. 1

    CredentialCache.DefaultCredentials不使用dotnet core 2.2的IIS应用程序池凭据

  2. 2

    IIS应用程序池登录凭据停止.net Core

  3. 3

    使用ThreadPoolExecutor应用程序的ExecutorChannel的池大小是否在请求范围内

  4. 4

    在请求之间共享应用程序线程池

  5. 5

    在C#控制台应用程序app.config中嵌入Webclient的凭据?

  6. 6

    什么是应用程序池?

  7. 7

    使用Facebook凭据登录我的应用程序

  8. 8

    iis应用程序池与umbraco过度使用内存

  9. 9

    使用强制选项在Powershell中创建应用程序池

  10. 10

    获取应用程序池的内存使用情况

  11. 11

    使用应用程序池帐户从MVC应用程序连接到WebAPI

  12. 12

    应用程序池为每个请求创建多个会话?如何杀死IIS会话?

  13. 13

    IIS 7.5应用程序池在首次请求网页时停止

  14. 14

    在WPF应用程序中加密凭据

  15. 15

    PHP应用程序中的Guzzle池

  16. 16

    获取应用程序池的标识

  17. 17

    IIS应用程序池,内存管理

  18. 18

    应用程序池存储在哪里

  19. 19

    IISExpress应用程序池回收

  20. 20

    当前应用程序池名称

  21. 21

    检查IIS应用程序池的状态

  22. 22

    应用程序池存储在哪里

  23. 23

    当前应用程序池名称

  24. 24

    通过应用程序池隔离进程

  25. 25

    跟踪应用程序池用户帐户

  26. 26

    如何在Google API中使用Web应用程序生成的令牌填充本机应用程序凭据?

  27. 27

    是否可以将虚拟应用程序配置为在Azure Web应用程序中使用单独的应用程序池?

  28. 28

    使用AspNetCoreModuleV2使用同一应用程序池托管多个.net核心

  29. 29

    Flask应用程序在使用线程池(使用UWSGI)时无法正常工作

热门标签

归档