asp.net 模拟从域中的服务器到域外的服务器

Posted

技术标签:

【中文标题】asp.net 模拟从域中的服务器到域外的服务器【英文标题】:asp.net impersonate from server in domain to server outside domain 【发布时间】:2011-11-10 18:10:10 【问题描述】:

我使用此代码http://platinumdogs.wordpress.com/2008/10/30/net-c-impersonation-with-network-credentials/#comment-770 从域中的机器连接到域外的机器。

我编写的 Web 应用程序从 Web 服务器连接到文件共享,以丢弃文件。

我的问题是在一种情况下我无法获得正确的凭据。在下面描述的两种情况下,我都使用相同的后端 dll。

我有 2 个运行此代码的应用程序。 1 与域外的两台机器,以及域中的网络服务器和域外的数据服务器。在执行从非域 Web 服务器服务器到非域数据服务器的请求的服务器上运行的代码正在运行。域 Web 服务器上请求非域数据服务器的代码不起作用。

为了进一步测试,我们将域服务器从域中取出,无需进一步更改,代码就可以再次运行。所以看起来我必须改变一些东西(可能是一个设置)才能让它工作。有人需要我做什么来解决这个问题吗?

@----------- 以下问题的额外信息:

这是一个静态用户名密码,在配置文件中指定。该帐户不是域帐户,并且与在其他服务器上使用的帐户相同。

    Request information: 
    Request URL: http://XXX.XXX.XXX.XXX/nl-nl/Attachment/GetAllFileNames 
    Request path: /nl-nl/Attachment/GetAllFileNames 
    User host address: XXX.XXX.XXX.XXX 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

    Thread information: 
    Thread ID: 1 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace:    at System.Web.Mvc.ViewResult.FindView(ControllerContext context)
   at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
     at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
     at System.Web.Mvc.Controller.ExecuteCore()
     at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
     at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)
     at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
   at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

【问题讨论】:

首先我假设您使用的是静态用户名/密码。它是域用户还是 Web 服务器上的本地用户帐户?第二,错误信息是什么?链接代码通过异常返回错误消息,因此应显示在响应页面或事件日志中。 【参考方案1】:

我发现了问题。

当来自域服务器时,我必须使用 logon_type_new_credentials (9) 而不是交互式 (2)。

【讨论】:

以上是关于asp.net 模拟从域中的服务器到域外的服务器的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 中的 WCF 模拟异常

ASP.NET 4 中的双跳模拟、协议转换和约束委派

从域中提取二级域? - Python

ASP.NET - 上下文敏捷对象,应用程序域中的数据共享概念?

使用 ASP.net 更改 HTML 文本区域中的字体名称和大小

ASP.NET - 在默认模拟用户时临时模拟应用程序池服务 ID?