Базовая служба Tridion 2011: невозможно подключиться в среде единого входа - PullRequest
11 голосов
/ 09 марта 2012

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

HTTP-запрос был запрещен при использовании схемы аутентификации клиента «Anonymous»

Среда Tridion настраивается с помощью единого входа из 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();
}

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

ОБНОВЛЕНИЕ:

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

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

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

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

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

1 Ответ

6 голосов
/ 09 марта 2012

Есть 2 проблемы с вашим кодом:

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

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

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

Кроме того, имейте в виду, что при настройке пользователя может потребоваться указать спецификатор имени пользователя (SSO по умолчанию), например, SSO \ user

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

...