2012-03-08 14 views
11

Durante il tentativo di connettersi al servizio Nucleo ottengo il seguente errore:Tridion 2011 Servizio principale: impossibile collegare in un ambiente SSO

The HTTP request was forbidden with client authentication scheme 'Anonymous'

L'ambiente Tridion è configurato con SSO da SiteMinder.

Ecco il mio codice:

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(); 
} 

Qualcuno ha esperienza di interazione con il servizio principale, con un tipo di autenticazione diverso da Windows?

UPDATE:

ora ottengo l'errore:

The HTTP request was forbidden with client authentication scheme 'Basic'.

Cosa clientCredentialType dovrebbe essere utilizzato nella /webservices/web.config per gli attacchi?

Quando interrompo il SsoAgentHttpModule in /webservies/web.config si ottiene un errore 500 sul servizio web, quindi SDL ci ha detto di lasciare questo commento.

Suppongo che questo modulo sia necessario per il CoreService per l'autenticazione con lo schema di autenticazione 'Base'?

+0

Non è necessario decommentare SsoAgentHttpModule in /webservices/web.config in quanto è stato decommentato nella configurazione di base e viene propagato per l'intero sito Web. Sei sicuro di essere connesso a un indirizzo corretto (URL SSO)? –

risposta

6

Ci sono 2 problemi con il tuo codice:

  1. aver impostato authentiction al anonima sul server e presume che lo stesso deve essere impostato sul client, ma non è il caso. Hai anche abilitato il modulo SSO LDAP sul server che entra in funzione non appena attivi l'autenticazione anonima. Sul lato client che sarà simile autenticazione di base semplice, in modo da codice di sicurezza client dovrebbe essere simile a questo:

    Security = new BasicHttpSecurity() 
        { 
         Mode = BasicHttpSecurityMode.TransportCredentialOnly, 
         Transport = new HttpTransportSecurity() 
         { 
          ClientCredentialType = HttpClientCredentialType.Basic, 
         } 
        } 
    
  2. È stato impostato il nome utente, ma non la password, in modo da:

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

Inoltre, è necessario specificare User Name Qualifier (SSO per impostazione predefinita) quando si imposta l'utente, ad esempio SSO \ utente

Questo dovrebbe farvi compiere un passo avanti, se continuate a ave problemi - aggiorna la tua domanda con l'eccezione recente.

+3

Grazie per l'aiuto, ho aggiornato la domanda con l'eccezione che ora otteniamo. –

+0

Ciao user978511, potresti visitare la proposta Tridion StackExchange quando hai un minuto per favore? http://area51.stackexchange.com/proposals/38335/tridion Crediamo che il punteggio di impegno richieda visite di volta in volta e quindi non è incluso nella figura "utenti con> 200 rep". Grazie! –

Problemi correlati