3

我开发了一个使用核心服务的 .Net 库。这个库是从工作流自动决策中的 VBScript 调用的,并使用核心服务来执行与该工作流过程相关的一些活动。

我能够使用我们为 Tridion 拥有的服务帐户成功连接到该服务:

CoreServiceClient client = new CoreServiceReference.CoreServiceClient(
                                                       binding, endpoint);
client.ChannelFactory.Credentials.Windows.ClientCredential = 
        new NetworkCredential(serviceAccountUsername, serviceAccountPassword);
client.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = 
        System.Security.Principal.TokenImpersonationLevel.Delegation;

相关绑定属性设置如下:

binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = 
        HttpClientCredentialType.Windows;

我遇到的问题是,当我调用核心服务时,我在 CMS 框中收到以下 Tridion Content Manager 错误:

用户 NT AUTHORITY\NETWORK SERVICE 的访问被拒绝。

如何配置我的客户端以便使用 Tridion 服务帐户而不是 NT AUTHORITY\NETWORK SERVICE 执行操作?

4

1 回答 1

7

如果您想在服务帐户下运行,您可能应该使用 aSessionAwareCoreServiceClient然后模拟您要使用的帐户。

var client = new SessionAwareCoreServiceClient(binding, endpoint);
client.Impersonate("Administrator");

但是由于我的大多数核心服务客户端实际上是要在不同的机器上运行,所以我不能使用Impersonate(至少在没有引入巨大的安全漏洞的情况下不能使用),所以我像这样初始化我的客户端:

var client = ...
var credentials = CredentialCache.DefaultNetworkCredentials;
if (!string.IsNullOrWhiteSpace(userName) && !string.IsNullOrWhiteSpace(password))
{
    credentials = new NetworkCredential(userName, password);
}
client.ChannelFactory.Credentials.Windows.ClientCredential = credentials;
于 2012-08-20T20:08:32.270 回答