【问题标题】:Authenticate with Atmosphere + Dropwizard使用 Atmosphere + Dropwizard 进行身份验证
【发布时间】:2015-03-22 02:17:01
【问题描述】:

您好,我正在寻找一种在用户建立 WebSocket 连接时对用户进行身份验证的方法,如果他们未通过身份验证,则关闭连接。我正在使用 Dropwizard 框架和 Atmosphere 进行 WebSocket 连接。 Here 是我使用的示例。 如果我可以在建立连接时使用 Dropwizard 提供的“@Auth”注释进行身份验证,那就太好了。

【问题讨论】:

    标签: java dropwizard atmosphere


    【解决方案1】:

    你是怎么曝光的?它是通过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();
    }
    

    然后,如果身份验证失败,您也可以轻松关闭连接。但是,根据您的客户端实现,您可能需要考虑这一点。如果客户端在关闭时自动重新连接,您会遇到不断关闭和打开套接字的情况,这可能会导致资源耗尽。如果身份验证不成功,您可以存储一个私有变量来说明此实例是否经过身份验证,然后放弃向其发送任何消息或处理来自它的任何消息。这也是一种让攻击者知道身份验证失败的“晦涩”方式,它只是处于不确定状态;已连接,但未失败或关闭。只是没有收到任何数据。但同样,这是特定于您的实现的。

    Jwt 身份验证是一个选项,请查看:https://github.com/ToastShaman/dropwizard-auth-jwt。虽然没有公开,但我已经将此实现移植到 dropwizard 0.8rc3-SNAPSHOT。如果你需要这个,请告诉我,我可以将它发布到 github。

    【讨论】:

    • 感谢您的回复,我最终将访问令牌添加到标题中。也像你说的,在关闭连接之前,我让客户端知道连接被关闭的原因。
    猜你喜欢
    • 2014-11-23
    • 2015-02-08
    • 2017-03-15
    • 2017-08-20
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多