Ошибка вызова SSPI. Операция GSSAPI завершилась с ошибкой. Указан неверный код состояния (SPNEGO не может найти механизмы для согласования). - PullRequest
0 голосов
/ 10 мая 2018

Я создаю основное веб-API-приложение asp.net, которое будет клиентом приложения служб WCF, работающего на компьютере с Windows. Это мой класс обслуживания клиентов:

public class VITServicesClient : ServicesClient, IDisposable
{

    static SpnEndpointIdentity spn = new SpnEndpointIdentity("BtaIntercardSPN");
    static EndpointIdentity endPointIdent = (spn as EndpointIdentity);
    static readonly NetTcpBinding binding;
    public static string Address { get; set; }


    private static AddressHeader addressHeader1 = AddressHeader.CreateAddressHeader("specialservice1", "http://localhost:8000/service", 1);
    private static AddressHeader addressHeader2 = AddressHeader.CreateAddressHeader("specialservice2", "http://localhost:8000/service", 2);
    private static AddressHeader[] addressHeaders = new AddressHeader[2] { addressHeader1, addressHeader2 };

    static VITServicesClient()
    {
        binding = new NetTcpBinding(SecurityMode.Transport);
        binding.Name = "NetTcpBinding";
        TcpTransportSecurity transportSecurity = new TcpTransportSecurity();
        transportSecurity.SslProtocols = SslProtocols.Tls12;
        transportSecurity.ClientCredentialType = TcpClientCredentialType.Windows;
        binding.Security.Mode = SecurityMode.Transport;
        binding.Security.Transport = transportSecurity;
        binding.SendTimeout = new TimeSpan(0, 3, 0);
        binding.MaxReceivedMessageSize = 1024 * 1024 * 100; //100MB max message size            
    }

    public VITServicesClient() : base (binding, new EndpointAddress(new Uri(Address+":31716/IServices"), endPointIdent, addressHeaders))
    {
    }


    public void Dispose()
    {
    }

}

И это веб-контроллер, который выполняет метод службы wcf:

public async Task<string> GetDocumentByCountryCode(string countryCode)
    {
        try
        {                
            VITServicesClient.Address = "net.tcp://10.64.4.61";
            using (var service = new VITServicesClient())
            {
                var result = await service.GetDocumentSamplesByCountryCodeAsync(countryCode.ToString(), 1);
                return (result as DocumentSamplesData[])[0].document_code;
            }                
        }
        catch (Exception ex)
        {
            return "failed " + ex.Message + ex.InnerException.InnerException.Message;
        }

    }

Когда я запускаю клиентское приложение под Windows, проблем не возникает, но когда я развертываю приложение в Ubuntu 16.04 и запускаю его, и когда оно пытается подключиться к службе WCF на компьютере с Windows, я получаю это исключение - Ошибка вызова SSPI, см. Внутреннее исключение. Операция GSSAPI завершилась с ошибкой - указан неверный код состояния (SPNEGO не может найти механизмы для согласования)

Я искал об этой проблеме, и должна быть какая-то проблема с аутентификацией Kerberos в Windows. Может быть, проблема в конфигурации, которую я использую в своем коде, или в Ubuntu могут быть параметры, которые нужно изменить.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы должны установить gss-ntlmssp в linux, чтобы решить эту проблему, используйте команду ниже

sudo apt-get update && apt-get install -y --no-install-Recommended gss-ntlmssp

0 голосов
/ 11 мая 2018

Это моя конфигурация WCF {"ProviderId": "Microsoft.VisualStudio.ConnectedService.Wcf", "Version": "15.0.20406.879", "ExtendedData": {"Uri": "net.tcp: // banana: 31716 / IServices "," Пространство имен ":" VITService "," SelectedAccessLevelForGeneratedClass ":" Public "," GenerateMessageContract ": false," ReuseTypesinReferencedAssemblies ": true," ReuseTypesinAll * ReferencedAssemblies 100 * * 100 *

true2, true2, true2, true ", 2}

...