11

コア サービスに接続しようとすると、次のエラーが表示されます。

HTTP 要求は、クライアント認証スキーム「匿名」で禁止されていました

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

Windows 以外の認証タイプでコア サービスとやり取りした経験のある人はいますか?

アップデート:

エラーが表示されます:

HTTP 要求は、クライアント認証方式「基本」では禁止されていました。

バインディングの /webservices/web.config で使用する clientCredentialType はどれですか?

/webservies/web.config の SsoAgentHttpModule のコメントを外すと、Web サービスで 500 エラーが発生するため、SDL はこれをコメントアウトしたままにするように指示しました。

CoreService が認証スキーム「Basic」で認証するには、このモジュールが必要だと思いますか?

4

1 に答える 1

6

コードには 2 つの問題があります。

  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\user のように、ユーザーを設定するときにユーザー名修飾子 (デフォルトでは SSO) を指定する必要がある場合があることに注意してください。

それでも問題が解決しない場合は、これで一歩近づくはずです。最近の例外で質問を更新してください。

于 2012-03-09T07:44:04.320 に答える