如何在NiFi中使用JettyWebSocketClient 1.12.0传递JWT授权Bearer令牌
解决NiFi JettyWebSocketClient 1.12.0添加JWT Bearer令牌的问题
核心方案:通过HTTP握手请求头注入JWT
JettyWebSocketClient的WebSocket连接建立依赖HTTP握手阶段,直接在握手请求中添加Authorization头是传递JWT Bearer令牌的标准方式。
代码层面实现(自定义处理器或ExecuteScript)
若允许编写代码,可借助ClientUpgradeRequest对象注入请求头:// 初始化JettyWebSocketClient WebSocketClient client = new WebSocketClient(); client.start(); // 创建升级请求并添加JWT头 ClientUpgradeRequest upgradeRequest = new ClientUpgradeRequest(); String jwtToken = "你的JWT令牌内容"; upgradeRequest.setHeader("Authorization", "Bearer " + jwtToken); // 执行连接 client.connect(new YourWebSocketListener(), new URI("wss://目标地址"), upgradeRequest);在NiFi中可使用
ExecuteScript处理器,选择Groovy/Java脚本编写上述逻辑,实现自定义握手头的注入。密码属性无效的原因
密码属性对应HTTP基本认证(Basic Auth),服务端会将其与用户名组合为Basic <base64编码串>格式的请求头,和JWT的Bearer <token>格式完全不兼容,因此服务端无法识别并返回403。自定义属性不被支持的原因
JettyWebSocketClient的内置属性仅覆盖官方定义的配置项,没有将自定义属性映射为HTTP请求头的逻辑,手动添加的自定义属性不会被客户端处理,因此报错。
内容的提问来源于stack exchange,提问作者Abhay
相关产品推荐
相关产品推荐

