标签: impersonation

如何让HttpClient与请求一起传递凭据?

我有一个与Windows服务对话的Web应用程序(在IIS中托管).Windows服务使用ASP.Net MVC Web API(自托管),因此可以使用JSON通过http进行通信.Web应用程序配置为进行模拟,其想法是向Web应用程序发出请求的用户应该是Web应用程序用来向服务发出请求的用户.结构如下所示:

(以红色突出显示的用户是以下示例中引用的用户.)


Web应用程序使用以下命令向Windows服务发出请求HttpClient:

var httpClient = new HttpClient(new HttpClientHandler() 
                      {
                          UseDefaultCredentials = true
                      });
httpClient.GetStringAsync("http://localhost/some/endpoint/");
Run Code Online (Sandbox Code Playgroud)

这会向Windows服务发出请求,但不会正确传递凭据(服务将用户报告为IIS APPPOOL\ASP.NET 4.0).这不是我想要发生的事情.

如果我将上述代码更改为使用WebClient,则会正确传递用户的凭据:

WebClient c = new WebClient
                   {
                       UseDefaultCredentials = true
                   };
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
Run Code Online (Sandbox Code Playgroud)

使用上述代码,服务将用户报告为向Web应用程序发出请求的用户.

我执行错误HttpClient导致它无法正确传递凭据(或者它是一个错误HttpClient),我做错了什么

我想使用HttpClient它的原因是它有一个与s兼容的异步API Task,而WebClientasyc API需要用事件处理.

c# impersonation windows-security asp.net-web-api

153
推荐指数
6
解决办法
19万
查看次数

你如何在.NET中进行模拟?

是否有一种简单的开箱即用方式来模拟.NET中的用户?

到目前为止,我一直在代码项目中使用这个类来满足我的所有模拟要求.

有没有更好的方法来使用.NET Framework?

我有一个用户凭据集(用户名,密码,域名),表示我需要模拟的身份.

.net c# impersonation

128
推荐指数
5
解决办法
22万
查看次数

如何在asp.net中识别impersonate ="true"时获取Windows用户名?

我正在创建一个内部网asp.net mvc应用程序,公司中的每个人都应该可以访问它.我需要运行模拟数据库访问的网站等,但我想知道每个用户是谁.

当我看着Page.User.Identity.Name它的空白时.即使网站正在模拟运行,是否可以获取用户的Windows帐户名称?

编辑: 这里有更多信息.我在IIS 6中有一个运行匿名访问的站点.该站点在可以访问数据库的系统帐户下运行(因为所有员工都无权访问数据库).

我的web.config有<authentication mode="Windows" /><identity impersonate="true"/>

我的目标是用户不必登录 - 他们登录我们网络的事实(以及该网站不在外部IP上的事实)是足够的身份验证.我想知道用户是谁以跟踪他们所做的更改等.

asp.net-mvc impersonation

45
推荐指数
2
解决办法
9万
查看次数

如何正确使用LogonUser从工作组客户端模拟域用户

ASP.NET:模拟VMWare上的域

这个问题就是我要问的问题,但答案并未提供有关_token如何派生的详细信息.它似乎只是使用WindowsIdentity.GetCurrent().Token所以没有冒充发生.

我可以在.NET中模拟其他Active Directory域上的用户吗?

接下来的问题有相互矛盾的答案,接受的答案是"我开始怀疑我的问题出在其他地方." 没用.

LogonUser仅适用于我的域

下一个问题似乎暗示它是不可能的,但它涉及2个域,所以我不确定它是否相关.

我真正的问题是:

  • 可能吗?如果是这样,
  • 怎么样?或者我哪里出错了?

我到目前为止尝试的是,使用http://msdn.microsoft.com/en-us/library/chf6fbt4%28v=VS.80%29.aspx中的代码

bool returnValue = LogonUser(user, domain, password,
            LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT,
            ref tokenHandle);
// after this point, returnValue = false
Run Code Online (Sandbox Code Playgroud)

Win32错误是

登录失败:未知的用户名或密码错误

.net c# impersonation winforms c#-2.0

40
推荐指数
3
解决办法
9万
查看次数

以不同的用户身份运行代码

有没有办法告诉我的代码以不同的用户身份运行?

我通过PInvoke调用NetUserSetInfo,我需要将其称为不同的用户.有没有办法做到这一点?

c# impersonation windows-authentication

35
推荐指数
3
解决办法
8万
查看次数

如何修复Kerberos双跳问题?

我在Web应用程序中调用Web服务时遇到了一些麻烦,我希望有人能够提供帮助.据我所知,这似乎与Kerberos 双跳问题有关.但是,如果是,我不知道该怎么做才能真正解决问题.为了使事情更难,我没有适当的权限来更改Active Directory帐户,因此我需要知道在请求更改时要求的内容.在我的情况下,我需要将凭据(集成Windows身份验证)从Web应用程序传递到后端Web服务,以便Web服务在适当的用户上下文中运行.

这是我的确切问题:

这有效

工作方案

这不起作用

非工作场景

只有工作方案和非工作方案之间的区别是,工作方案正在运行在本地主机上的应用程序(无论是开发人员的电脑或有问题的服务器上)和非工作实例另一台机器上运行.两种方案之间的代码完全相同.

我试过的

  1. 将SPN添加到为每个服务器运行应用程序池的域帐户 setspn -a http/server1 DOMAIN\account
  2. 不同的冒充方法
  3. 删除模拟代码using(...)并将Web服务调用作为应用程序池帐户执行.这按预期工作.

有没有人知道我可以做些什么来解决这个问题?

asp.net impersonation wcf kerberos

31
推荐指数
1
解决办法
3万
查看次数

来自C#的Windows模拟

作为LocalSystem运行的C#程序如何临时模拟另一个用户的登录标识?粗略地说,我有一个Windows服务,我想作为LocalSystem运行,但有时模仿用户XYZ(当使用Windows集成安全性连接到数据库时).

最重要的是:有没有办法在不知道其他用户密码的情况下做到这一点?

注意:如果密码是强制性的,则建议安全地存储密码(c#和/或vbscript).

c# windows impersonation

30
推荐指数
3
解决办法
6万
查看次数

使用表单身份验证进行模拟

我有一个ASP.NET站点,必须使用表单身份验证而不是Windows身份验证来访问ActiveDirectoryMembershipProvider.该站点必须使用表单,因为它们需要设计的输入表单,而不是Windows身份验证使用的浏览器身份验证弹出窗口.

该站点需要模拟通过Active Directory登录的用户访问用户特定文件.

但是,WindowsIdentity.GetCurrent()由于是不一样的HttpContext.Current.User.Identity,虽然我的web.config包括:

<authentication mode="Forms">
    <forms loginUrl="login.aspx" timeout="480"/>
</authentication>
<identity impersonate="true" />
Run Code Online (Sandbox Code Playgroud)

我无法使用LoginUser(),WindowsIdentity.Impersonate()因为我需要冒充AD用户来获取他们的特定权限,而我不知道用户的密码,因为Forms负责登录.

是否可以从login.aspx.cs获取System.Web.UI.WebControls.Login.Password,然后将LoginUser()令牌保存在会话变量中以供WindowsIdentity.Impersonate()日后使用?或者可能采用更安全的方法冒充正确的方法?

我很困惑为什么表单身份验证不能自动 <identity impersonate="true" />

我已阅读此http://msdn.microsoft.com/en-us/library/ms998351.aspx但它使用Windows身份验证.

asp.net impersonation forms-authentication active-directory windows-authentication

25
推荐指数
1
解决办法
2万
查看次数

Web.Config中的模拟标记

impersonate在Asp.net 4.0网站的web.config中使用标签.

下面是我的Web.Config代码:

<system.web>
    <authentication mode="Windows">
        <identity impersonate="true"                 
            userName="Administrator" 
            password="LALLA$26526"/>
     </authentication>
</system.web>
Run Code Online (Sandbox Code Playgroud)

当我在Visual Studio中运行应用程序时,我收到此错误:

Parser Error Message: Unrecognized element 'identity'.
Run Code Online (Sandbox Code Playgroud)

来源错误:

Line 50:    <system.web>
Line 51:        <authentication mode="Windows">
Line 52:            <identity impersonate="true"             
Line 53:                 userName="Administrator"
Line 54:                 password="LALLA$26526"/>
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

asp.net impersonation web-config

25
推荐指数
3
解决办法
12万
查看次数

ASP.NET MVC中的模拟

我在Intranet上有一个MVC Web应用程序,希望能够在我们的FTP服务器上创建文件以发送给外部合作伙伴.

模拟代码使用WindowsImpersonationContext.

System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();

StreamWriter sw = System.IO.File.CreateText("PathOnFTPServer");
sw.Write("data");

impersonationContext.Undo();
Run Code Online (Sandbox Code Playgroud)

这是发生了什么以及我的问题的原因:

预先假冒

User.Identity.Name:[我的Windows凭据]

System.Security.Principal.WindowsIdentity.GetCurrent().名称:NT AUTHORITY\NETWORK SERVICE

发布模仿

User.Identity:[我的Windows凭据]

GetCurrent.Name:[我的窗口凭据]

模仿撤消

User.Identity:[我的Windows凭据]

GetCurrent.Name:NT AUTHORITY\NETWORK SERVICE

因此,在我冒充之前,当前用户是系统帐户,但在模仿之后,它正在使用我的Windows域帐户,该帐户有权在FTP服务器上创建文本文件.该代码使用visual studio Web服务器在本地工作,但在我在测试服务器上的IIS上部署时则不行.

我收到拒绝访问错误.正确的用户被模拟时出现错误的原因是什么?

c# asp.net-mvc impersonation

23
推荐指数
1
解决办法
3万
查看次数