嗨,我正在寻找一种在用户建立WebSocket连接时对用户进行身份验证的方法,并且如果他们未经身份验证就可以关闭连接。我正在为WebSocket连接使用Dropwizard框架和Atmosphere。这是我使用的示例。如果在建立连接时可以使用Dropwizard提供的'@Auth'注释进行身份验证,那就太好了。
你怎么暴露这个?是通过javascript前端吗?
您正在使用链接中和此处描述的基于servlet的方法:https : //cvwjensen.wordpress.com/2014/08/02/websockets-in-dropwizard/,而不是球衣大气扩展名?
如果您使用的是基于servlet的方法,建议您使用基于令牌的方法将令牌放入http标头中,然后在@Ready处理程序方法中访问此标头,如下所示:
@Ready
public String onReady(final AtmosphereResource resource) {
String AuthHeader = resource.getRequest().getHeader("Authorization");
...DO AUTH HERE
logger.info("Resource {} connected ", resource.uuid());
return "Connect " + resource.uuid();
}
然后,如果身份验证失败,您也可以轻松关闭连接。但是,根据您的客户端实现,您可能需要考虑一下。如果客户端在关闭时自动重新连接,则您会遇到不断关闭和打开套接字的情况,这可能会导致资源耗尽。如果auth不成功,则可以存储一个私有变量,该变量声明此实例是否已通过身份验证,而只是丢弃向其发送任何消息或从中处理任何消息。这也是让攻击者知道auth失败的一种“晦涩”方式,它只是处于不稳定状态。已连接,但未失败或关闭。只是没有收到任何数据。但这又是特定于您的实现的。
Jwt auth是一个选项,请查看:https : //github.com/ToastShaman/dropwizard-auth-jwt。尽管未公开,但我已将此实现移植到dropwizard 0.8rc3-SNAPSHOT。如果您需要这个,请告诉我,我可以将其发布到github。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句