对 SSPI 的调用失败 GSSAPI 操作失败并出现错误 - 提供了无效的状态代码(SPNEGO 找不到协商机制)

2024-06-25

我正在构建一个 ASP.NET Core WebApi 应用程序,它将成为在 Windows 计算机上工作的 WCF 服务应用程序的客户端。这是我的服务客户端类:

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 服务方法的 Web 控制器:

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 上部署应用程序并运行它时,当它尝试连接到 Windows 计算机上的 WCF 服务时,我遇到了异常 - 调用SSPI 失败,请参阅内部异常。GSSAPI 操作失败并出现错误 - 提供了无效的状态代码(SPNEGO 找不到协商机制)

我搜索了这个问题,Windows 中的 kerberos 身份验证肯定存在一些问题。 问题可能出在我在代码中使用的配置中,或者 Ubuntu 中可能有一个必须更改的选项。


您必须在 Linux 上安装 gss-ntlmssp 才能解决该问题,请使用以下命令

sudo apt-get update && apt-get install -y --no-install-推荐 gss-ntlmssp

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 SSPI 的调用失败 GSSAPI 操作失败并出现错误 - 提供了无效的状态代码(SPNEGO 找不到协商机制) 的相关文章

随机推荐

  • sprintf 与 String.Format 的性能[重复]

    这个问题在这里已经有答案了 我正在比较 sprintf 用法的性能 并对我所看到的感到有点困扰 我测试了以下 4 个方法 将 ClassWithToString 的实例传递给每个方法 PrintInt 除外 它接收实际的整数值 type C
  • 来自heroku的https请求

    我想通过 https 协议从 vk com api 获取数据 像这样 var https require https https get https api vk com method users get access token glob
  • Jenkins 无法访问 java : localhost jenkins[807]: 启动 Jenkins bash: /usr/bin/java: 权限被拒绝

    我已经在centos 7上安装并配置了jenkins 我已经添加了有效的java路径即文件中的 usr bin java etc init d jenkins 以下是 java 路径详细信息 lrwxrwxrwx 1 root root 2
  • 未知类型名称“ssize_t”[重复]

    这个问题在这里已经有答案了 我目前遇到错误 未知类型名称 ssize t 我看了一下Linux中ssize t在哪里定义的 https stackoverflow com questions 55190317 where is ssize
  • 如何合并多个版本的gcda文件?

    我正在使用 gcov 来获取我的应用程序的覆盖范围信息 但是 我的应用程序有 3 个实例同时运行 创建了 3 个版本的 gcda 文件 有没有办法在我的覆盖信息文件中合并相同 gcda 文件的不同版本 我只想将覆盖范围信息作为一个实例 我刚
  • Java 扫描器有NextLine NoSuchElementException?

    我正在尝试逐行读取一个大型 csv 文件 以查找其中字符串出现的次数 这是执行此操作的代码 public int getOffset File file String searched throws FileNotFoundExceptio
  • 错误:没有编译器提供程序! DI 异常 Angular 2 测试

    使用 npm test 命令执行时 给定的单元测试会抛出错误 它表示存在 DI 异常 并显示错误消息 错误 没有编译器提供程序 import TestComponentBuilder from angular compiler testin
  • 在节点模块文件夹中编辑react npm模块的代码

    是否可以更改 module 文件夹中 npm 模块的代码 我认为这不是推荐的做法 还有其他方法可以实现这一目标吗 目前 我尝试更改模块目录中的代码 但更改似乎并不适用 提前致谢 当然你可以改变包的内容node modules因为它是标准化格
  • 统一的网格组合器

    你好 我正在使用这个人的脚本https www youtube com watch v wYAlky1aZn4 https www youtube com watch v wYAlky1aZn4组合网格 因为游戏运行不流畅时会出现 滞后 或
  • Apple Watch 表 - 前 4 行未出现

    我在添加行时遇到问题WKInterfaceTable在苹果手表上 奇怪的是 无论我做什么 前 4 行都显示为空 我尝试手动添加行并循环 没关系 我相信我的代码很好 因为第五行和其他行看起来都很好 发生的情况如下 进一步滚动 My code
  • 如何用R创建时间散点图?

    数据是一系列日期和时间 date time 2010 01 01 09 04 43 2010 01 01 10 53 59 2010 01 01 10 57 18 2010 01 01 10 59 30 2010 01 01 11 00 4
  • 如何在当前鼠标位置设置工具提示?

    I registered Hotkey Ctrl Space Hotkey message is sent to private void Hotkey press I want to show tooltip Hello at curre
  • 如何在 Swift 中按换行符分割字符串

    我有一个从文本文件中获得的字符串 文本文件 Line 1 Line 2 Line 3 我想将其转换为数组 每行一个数组元素 Line 1 Line 2 Line 3 根据文件的保存方式 字符串可能采用以下形式之一 string Line 1
  • 如何将参数传递给 PyQt 中的回调函数

    我的工具栏中有大约 10 个 QAction 这个数字在运行时会有所不同 它们都将执行相同的操作 但使用不同的参数 我正在考虑将参数作为属性添加到 QAction 对象 然后 QAction 的触发信号也会将对象本身发送到回调函数 以便我可
  • 主/详细信息应用程序中的导航项

    我使用 XCode 的 Master Detail 模板编写了一个 Master Detail 应用程序 启动应用程序后 主视图的导航按钮的标题只是 Master 现在我想重命名该按钮 但不幸的是我不知道如何访问该按钮 在appdelega
  • 为什么 Apache Spark 会读取嵌套结构中不必要的 Parquet 列?

    我的团队正在构建一个 ETL 流程 以使用 Spark 将原始分隔文本文件加载到基于 Parquet 的 数据湖 中 Parquet 列存储的承诺之一是查询将仅读取必要的 列条带 但我们看到意外的列被读取以获取嵌套模式结构 为了进行演示 下
  • 在 Laravel 5.2 中按 id 显示图像文件

    我有一个名为 files 的表 它保存与属性表相关的图像的名称 我试图使这些图像显示为以下关系 这是属性表的一部分 这是表文件及其与属性表的关系 我可以在控制器 PropertyController 的 show 方法中传递什么参数 目前我
  • IE 错误响应 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我的 IE
  • Node.js 多线程程序

    我编写了一个 node js 脚本来从交易所获取一些价格 它看起来像这样 async function main async function func var start time performance now for let rout
  • 对 SSPI 的调用失败 GSSAPI 操作失败并出现错误 - 提供了无效的状态代码(SPNEGO 找不到协商机制)

    我正在构建一个 ASP NET Core WebApi 应用程序 它将成为在 Windows 计算机上工作的 WCF 服务应用程序的客户端 这是我的服务客户端类 public class VITServicesClient Services