我需要连接到一个Websocket服务,该服务使用来自独立Java进程的spnego身份验证。
任何人都可以提供一个Java示例或将我指向具有此功能的库吗?
我可以使用SpnegoHttpURLConnection在同一台服务器上查询rest api-因此,spengo kerberos部分可以工作。如果在服务器上禁用身份验证,我也可以连接到websocket。
但是,SpengoHttpURLConnection没有任何简单的方法可以将连接升级到websocket,并且我找不到可以配置spnego身份验证的websocket客户端库。
您可以使用Kerb4J生成SPNEGO令牌,然后使用ClientEndpointConfig.Configurator.beforeRequest(Map> headers)方法将其添加到标头中。
如果您的websocket在wss://ws.server.com
上运行,并且您使用svc_consumer
帐户和/opt/myapp/consumer.keytab
密钥表进行身份验证,则代码将如下所示:
SpnegoClient spnegoClient = SpnegoClient.loginWithKeyTab("svc_consumer", "/opt/myapp/consumer.keytab");
@Override
public void beforeRequest(Map<String,List<String>> headers) {
SpnegoContext context = spnegoClient.createContext("https://ws.server.com");
headers.put("Authorization", Collections.singletonList(context.createTokenAsAuthroizationHeader()));
}
免责声明:我是Kerb4J的作者>