我正在尝试从前端到vertx后端建立一个sock.js连接。
我最初的尝试是这样的:
let token = '<the token>';
let data = {'Authorization' : 'Bearer ' + token};
let eb = new EventBus("http://localhost:8080/eventbus");
eb.onopen = function () {
eb.registerHandler('notifications', data, (err, msg) => {
// handle the response
});
}这不起作用,因为我需要发送关于EventBus创建的auth数据,尽管官方的sock.js文档声明这是不支持的。显然,现在发送new EventBus("http://localhost:9090/eventbus", data)也不起作用。
https://github.com/sockjs/sockjs-node#authorisation
我的后端处理程序:
final BridgeOptions bridgeOptions = new BridgeOptions()
.addOutboundPermitted(new PermittedOptions().setAddress("notifications"))
final SockJSHandler sockJSHandler = SockJSHandler.create(vertx).bridge(bridgeOptions, event -> {
event.complete(true);
});
router.route("/eventbus/*").handler(ctx -> {
String token = ctx.request().getHeader("Authorization"); // null
});
router.route("/eventbus/*").handler(sockJSHandler);无论我尝试了什么,标头字段Authroization总是为空。
在vertx中验证sock.js连接并注册到事件总线请求的标准方法是什么?
发布于 2017-06-06 21:57:44
默认情况下,SockJS使用WebSockets。不能使用JavaScript WebSocket API添加自定义标头(授权等)。请阅读此thread以获得更多解释。
我看到了两种方法,您可以如何添加授权:
token参数添加到URL:
设eb =新的EventBus("http://localhost:8080/eventbus?token=“+令牌);
下面是如何在服务器上获得它的方法:
字符串令牌= ctx.request().getParam(" token ");token字段的JSON对象。我认为,第一个选项已经足够了,但是第二个选项在事件总线和SockJS方面可能更难实现。
发布于 2018-10-10 22:28:13
由于发送授权头是不可能的,因此附加令牌查询参数(如@berserkk所述)是可行的方法。
但是,在某些情况下,以纯文本形式发送主登录令牌作为查询参数可能是不可取的,因为它比使用标头更不透明,最终会被记录在何处。如果这给您带来了安全问题,的另一种选择是只为web 使用一个次要的JWT令牌。
创建一个REST端点来生成这个JWT,当然只有通过主登录令牌进行身份验证的用户才能访问这个端点(通过标头传输)。web可以配置与登录令牌不同的配置,例如,使用更短的超时时间,因此作为升级请求的查询param发送更安全。
为您在上注册SockJS eventbusHandler的同一条路由创建一个单独的eventbusHandler。确保首先注册了auth处理程序,这样就可以对照数据库检查web套接字令牌( JWT应该以某种方式链接到后端的用户)。
发布于 2017-06-10 19:17:50
我认为保护web套接字的最好方法是使用CORS检查。
跨源资源共享是一种安全的资源请求机制
router.route().handler(CorsHandler.create(your host origin path).allowCredentials(true));我们还可以使用sockjs添加更多的安全层:
允许事件总线桥内/外指定地址的事件
BridgeOptions opts = new BridgeOptions()
.addInboundPermitted(new PermittedOptions().setAddressRegex(Constants.INBOUND_REGEXP));https://stackoverflow.com/questions/44386942
复制相似问题