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 のアクセスが拒否されました。

NT AUTHORITY\NETWORK SERVICE の代わりに Tridion サービス アカウントを使用して操作が実行されるようにクライアントを構成するにはどうすればよいですか?

4

1 に答える 1

7

サービスアカウントで実行する場合は、おそらくを使用してSessionAwareCoreServiceClientから、使用するアカウントになりすます必要があります。

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 に答える