从 WCF 服务如何以当前用户而不是 IIS\DefaultApppool 的身份调用第三方 dll 中的方法

Posted

技术标签:

【中文标题】从 WCF 服务如何以当前用户而不是 IIS\\DefaultApppool 的身份调用第三方 dll 中的方法【英文标题】:From a WCF service how can I call a method in a third party dll as the current user not IIS\DefaultApppool从 WCF 服务如何以当前用户而不是 IIS\DefaultApppool 的身份调用第三方 dll 中的方法 【发布时间】:2012-10-10 18:48:53 【问题描述】:

我需要编写一个 WCF 服务,该服务将使用 VBA 代码中的服务名称对象从 MS Excel 中调用。到目前为止,我已经弄清楚了那部分。

我也有模拟工作,所以如果我要从 web 方法返回当前用户,它将返回我的用户名,而不是 IIS\DefaultAppPool 或任何 IIS 正在运行的...

所以这是我的问题。我有一个第三方 dll “如果有人感兴趣,Cyber​​Ark 密码管理”,我在其中创建了一个 PWD 对象,设置了一些参数,然后调用了一个名为 Getpassword 的方法。现在我可以调用该方法,但我总是遇到身份验证失败。如果我深入研究正在运行的 Cyber​​Ark 代理的日志,似乎即使我正在使用 Impersonation,dll 方法仍被称为 IIS\DefaultAppPool

这里有几个sn-ps...

在方法级别打开模拟

[OperationBehavior(Impersonation = ImpersonationOption.Required)]

对该方法的调用返回我的域和用户名,正如我所期望的那样

WindowsIdentity.GetCurrent().Name

但是这条线被称为 IIS\DefaultAppPool

password = PasswordSDK.GetPassword(passRequest);

我尝试在代码中进行模拟而不是使用注释,我还尝试了一个使用 bolck 的模拟对象,但似乎没有任何效果,所以这就是我的想法。

    出于安全原因,该 dll 不允许我冒充调用者

    可能是 .NET 框架出于安全原因不允许再次这样做

    我不知道,希望得到帮助 :-)

【问题讨论】:

【参考方案1】:

您可以self-host 应用程序而不是使用 IIS 来托管。然后该服务将在已经以当前用户身份运行的进程中运行。

(如果这是一个选项)

【讨论】:

您也可以设置 IIS 以在特定帐户下运行应用程序。 我可能需要更多解释...该服务必须驻留在安装了特定软件的服务器上。为了进行测试,我在本地安装了“代理”。没有代理,无论如何它都不会工作。如果我要进行自托管服务,我假设可执行文件将驻留在最终用户机器上,对吗?然后服务可以驻留在安装了代理的机器上。我会尝试你的建议,看看我想出了什么,只是认为这可能会增加我的问题的清晰度。谢谢

以上是关于从 WCF 服务如何以当前用户而不是 IIS\DefaultApppool 的身份调用第三方 dll 中的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何从 WCF 打印数组的值以形成标签?

RESTful WCF 服务安全性

如何使用用户名/密码 + SSL 使用 WCF 配置安全 RESTful 服务

从作为 LocalSystem 运行的 WCF 托管服务以特定用户身份启动进程

为啥我必须使用 WCF 而不是 Web 服务? [复制]

wcf 尝试设置跟踪以进行调试,而不是写入日志文件