使用SASL和JAAS验证WebSocket会话

时间:2018-08-27 08:56:31

标签: authentication java-ee jaas sasl

我想在Java EE应用程序服务器(特别是Wildfly)中提供WebSocket聊天服务器。

聊天协议是XMPP,它使用SASL(简单身份验证和安全层)。 用户必须先进行身份验证,然后才能聊天。

问题1 : 我想保持灵活性,以便可以使用其他身份验证提供程序,例如针对application-users.properties文件中配置的Wildfly用户进行身份验证,或者针对LDAP服务器或自定义身份验证服务器之类的任何其他后端进行身份验证。

为简单起见,我从PLAIN身份验证开始。我的问题是当我打电话时

Sasl.createSaslServer(auth.getMechanism(), "xmpp", "", Collections.emptyMap(), callbacks -> {});

我得到:

org.wildfly.security.sasl.plain.PlainSaslServer

它也需要特定于Wildfly的回调实现,我想避免这种情况。

我可能可以编写并提供自己的SaslServer实现,但是那如何对不同的后端进行身份验证? 我以为我必须将SaslServer与LoginModule结合起来?

但是here我发现了这一点:

  

但是,当您拥有SaslServer时会发生什么(您需要对之进行操作   提供一个CallbackHandler来验证和验证用户)   您需要绑定到一个JAAS LoginModule(您还需要绑定到该模块)   在服务器端提供CallbackHandler)?好吧,那行不通。   完全没有。

问题2 : 即使我设法验证WebSocket会话,如何将其标记为已验证? 我想使用安全角色,例如经过身份验证的聊天客户端调用不允许调用的方法时,我想返回一个错误。 我想与javax.annotation.security.*合作,例如@RolesAllowed注释。

感谢帮助和提示。

编辑:不必是JAAS。如果这里有用,我已经读过有关JASPI的信息。

0 个答案:

没有答案