我有一个Java客户端连接到WCF服务。该服务配置为以单独的域用户(即不是本地服务或网络服务)的身份在主机上运行。服务在其WSDL中发布userPrincipalName。

在SpNego代币交换过程中,客户端出现以下异常

Defective token detected (Mechanism level: AP_REP token id does not match!)
This is the call stack:
    at sun.security.jgss.spnego.SpNegoContext.initSecContext(SpNegoContext.java:450)
    at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:230)
    at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:162)


如果我将WCF服务配置为在本地系统帐户下运行,则SpNego令牌交换将起作用。
是否需要为不在本地系统帐户下运行的服务修改代码?

更新1

通过使C#客户端与WCF服务连接进行一些调试之后,我发现C#客户端正在使用SpNego协议的修改版本,称为MS-SPNG。 Java 6是否支持此功能?当我检查令牌时,收到关于不受支持的机制1.2.840.113554.1.2.2.3的错误。

最佳答案

这些链接说明了发生了什么。 MS具有SpNego协议的扩展,当我们以用户身份运行WCF服务(即不以本地服务等身份)时,该扩展就会启动。
This是新协议的MS规范,here是xplains解决方法的openjdk文档。

07-28 03:24