带有 spnego 的 Java websocket 客户端
Posted
技术标签:
【中文标题】带有 spnego 的 Java websocket 客户端【英文标题】:Java websocket client with spnego 【发布时间】:2019-10-15 12:16:45 【问题描述】:我需要从一个独立的 java 进程连接到一个使用 spnego 身份验证的 websocket 服务。
任何人都可以提供一个 java 示例或指向一个具有此功能的库吗?
我可以使用 SpnegoHttpURLConnection 查询同一服务器上的 rest api - 所以 spnego kerberos 部分可以工作。 如果我禁用服务器上的身份验证,我也可以连接到 websocket。
但是,SpengoHttpURLConnection 没有任何简单的方法可以将连接升级到 websocket,而且我找不到可以让我配置 spnego 身份验证的 websocket 客户端库。
【问题讨论】:
您检查过这个:docs.oracle.com/javase/10/security/… - 这对您有帮助吗? 可能,它没有提到 websockets,但它可能会配置一个能够使用 jaas 配置的 websocket 客户端库 【参考方案1】:您可以使用Kerb4J 生成SPNEGO 令牌,并使用ClientEndpointConfig.Configurator.beforeRequest(Map> headers) 方法将其添加到标头中。
如果您的 websocket 在 wss://ws.server.com
上运行,并且您使用 svc_consumer
帐户和 /opt/myapp/consumer.keytab
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的作者
【讨论】:
天才。并感谢标题配置 sn-p - 我需要一段时间才能找到它。不幸的是,您不能将自己的 ClientEndpointConfig 与带注释的 Endpoint 实现一起使用。以上是关于带有 spnego 的 Java websocket 客户端的主要内容,如果未能解决你的问题,请参考以下文章
SPNEGO Kerberos 单点登录在 tomcat 服务器的 AD 域中不起作用
如何使用 Ivy iBiblio 解析器连接到受 SPNEGO 保护的 Maven 存储库?