2012-03-08 3 views
11

에 연결 :Tridion 2011 핵심 서비스 : 나는 다음과 같은 오류가 핵심 서비스에 연결을 시도하는 동안 수 없음은 SSO 환경

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

Tridion 환경은 SiteMinder에서의 SSO 구성되어 있습니다.

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

아무도 윈도우 이외의 인증 유형과 핵심 서비스와 상호 작용의 경험이 있습니까

:

여기 내 코드입니까?

UPDATE :

지금 오류를 얻을 : 무엇 clientCredentialType은 바인딩에 대한 /webservices/web.config 사용되어야한다

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

?

/webservies/web.config에서 SsoAgentHttpModule의 주석을 제거하면 webservice에서 500 오류가 발생하므로 SDL에서는이 주석을 남겨 두라고했습니다.

이 모듈은 CoreService가 인증 체계 'Basic'으로 인증하는 데 필요합니까?

+0

루트 구성에서 주석 처리를 제거 했으므로 /webservices/web.config의 SsoAgentHttpModule을 주석 처리 할 필요가 없으며 전체 웹 사이트에 적용됩니다. 적절한 (SSO URL)에 연결 하시겠습니까? –

답변

6

는 코드 2 문제가 있습니다 : 서버에 익명으로 authentiction를 설정하고 같은 클라이언트에서 설정해야한다고 가정 한

  1. 하지만 그렇지 않다. 익명 인증을 사용하자마자 서버에서 LDAP SSO 모듈을 활성화했습니다. 당신은 비밀 번호를 사용자 이름을 설정할 수 있지만하지 않은

    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)를 지정해야 할 수도 있음을 기억하십시오.

이렇게하면 h ave 문제 - 최근 예외로 질문을 업데이트하십시오.

+3

도움을 주셔서 감사합니다. 지금은 예외로 질문을 업데이트했습니다. –

+0

안녕하세요. 사용자 978511, 잠시 시간을내어 Tridion StackExchange 제안을 방문해 주시겠습니까? http://area51.stackexchange.com/proposals/38335/tridion 약정 점수에는 수시로 방문해야하므로 "200 자 이상의 사용자"에 포함되지 않습니다. 감사! –

관련 문제