Tridion 2011 Core Service: невозможно подключиться в среде единого входа

При попытке подключения к основной службе я получаю следующую ошибку:

HTTP-запрос был запрещен с помощью схемы проверки подлинности клиента "Аноним"

Среда Tridion настроена с помощью SSO из SiteMinder.

Здесь мой код:

public static ICoreService2010 GetTridionClient()
{
    var binding = new BasicHttpBinding()
    {
        Name = "BasicHttpBinding_TridionCoreService",
        CloseTimeout = new TimeSpan(0, 1, 0),
        OpenTimeout = new TimeSpan(0, 1, 0),
        ReceiveTimeout = new TimeSpan(0, 10, 0),
        SendTimeout = new TimeSpan(0, 1, 0),
        AllowCookies = false,
        BypassProxyOnLocal = false,
        HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
        MaxBufferSize = 4194304, // 4MB
        MaxBufferPoolSize = 4194304,
        MaxReceivedMessageSize = 4194304,
        MessageEncoding = WSMessageEncoding.Text,
        TextEncoding = System.Text.Encoding.UTF8,
        TransferMode = TransferMode.Buffered,
        UseDefaultWebProxy = true,
        ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
        {
            MaxDepth = 32,
            MaxStringContentLength = 4194304, // 4MB
            MaxArrayLength = 4194304,
            MaxBytesPerRead = 4194304,
            MaxNameTableCharCount = 16384
        },
        Security = new BasicHttpSecurity()
        {
            Mode = BasicHttpSecurityMode.TransportCredentialOnly,
            Transport = new HttpTransportSecurity()
            {
                ClientCredentialType = HttpClientCredentialType.None,
            },
            Message = new BasicHttpMessageSecurity()
            {
                ClientCredentialType = BasicHttpMessageCredentialType.UserName
            }
        }
    };

    string hostname = ConfigurationManager.AppSettings["TridionUrl"];
    string username = ConfigurationManager.AppSettings["TridionUsername"];

    hostname = string.Format("{0}{1}{2}", 
                              hostname.StartsWith("http") ? "" : "http://",
                              hostname, 
                              hostname.EndsWith("/") ? "" : "/");
    var endpoint = new EndpointAddress(hostname +
                              "/webservices/CoreService.svc/basicHttp_2010");
    var factory = new ChannelFactory<ICoreService2010>(binding, endpoint);
    factory.Credentials.UserName.UserName = username;

    return factory.CreateChannel();
}

Есть ли у кого-нибудь опыт взаимодействия с Core Service с типом аутентификации, отличным от Windows?

ОБНОВЛЕНИЕ:

Теперь я получаю ошибку:

HTTP-запрос был запрещен с помощью схемы аутентификации клиента "Basic".

Какой clientCredentialType следует использовать в /webservices/web.config для привязок?

Когда я раскомментирую SsoAgentHttpModule в файле /webservies/web.config, мы получаем ошибку 500 на веб-сервисе, поэтому SDL сказал нам оставить это прокомментированным.

Я полагаю, что этот модуль необходим для проверки подлинности CoreService с помощью схемы аутентификации "Basic"?

Ответ 1

В коде есть 2 проблемы:

  • Вы установили аутентификацию анонимным на сервере и предположили, что на клиенте должно быть установлено то же самое, но это не так. Вы также включили модуль SSO LDAP на сервере, который запускается, как только вы включаете анонимную аутентификацию. На стороне клиента это будет выглядеть как простая базовая аутентификация, поэтому код безопасности клиента должен выглядеть следующим образом:

    Security = new BasicHttpSecurity() 
        { 
            Mode = BasicHttpSecurityMode.TransportCredentialOnly, 
            Transport = new HttpTransportSecurity() 
            { 
                ClientCredentialType = HttpClientCredentialType.Basic, 
            }
        } 
    
  • Вы установили имя пользователя, но не пароль, поэтому:

    factory.Credentials.UserName.UserName = username;
    factory.Credentials.UserName.Password = password; 
    

Кроме того, имейте в виду, что при настройке пользователя, например, SSO\user

вам может потребоваться указать User Name Qualifier (SSO по умолчанию)

Это должно сделать шаг ближе, если у вас все еще есть проблемы - обновите свой вопрос с недавним исключением.