Tridion CoreService身份验证/模拟

时间:2012-08-20 20:04:27

标签: wcf tridion tridion-2011

我开发了一个使用核心服务的.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;

我遇到的问题是,当我调用Core Service时,我在CMS框上收到以下Tridion Content Manager错误:

  

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

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

1 个答案:

答案 0 :(得分:7)

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

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

但由于我的大多数核心服务客户端实际上都是在不同的计算机上运行,​​因此我无法使用Impersonate(至少在没有引入 巨大 <的情况下/ strong>安全漏洞),所以我会像这样初始化我的客户:

var client = ...
var credentials = CredentialCache.DefaultNetworkCredentials;
if (!string.IsNullOrWhiteSpace(userName) && !string.IsNullOrWhiteSpace(password))
{
    credentials = new NetworkCredential(userName, password);
}
client.ChannelFactory.Credentials.Windows.ClientCredential = credentials;