SailsJS - 将 sails.io.js 与 JWT 结合使用

2024-03-05

我已经实现了一个 AngularJS 应用程序,使用 sails.io.js 通过 websockets 与 Sails 后端进行通信。

由于后端基本上是一个纯 API,并且也会从其他应用程序连接,因此我尝试完全禁用会话并使用 JWT。

我已经设置了express-jwt并且可以很好地使用常规HTTP请求,但是当我通过 sails.io.js 发送请求时,根本没有任何反应 - websocket 请求在客户端上保持待处理状态,并且服务器上没有任何反应(具有“愚蠢”的日志级别)。

我尝试修补 sails.io.js 以支持查询参数 https://github.com/balderdashy/sails.io.js/pull/46,并且在连接时,我从 Angular 发送令牌,但在最好的情况下,我收到来自 express-jwt 的错误消息响应,提示凭据丢失...

我还看到一些提示,sails中的socket.js需要用beforeConnect修改,我见过socketio-jwt https://github.com/auth0/socketio-jwt,但不知道在 Sails 中的何处以及如何插入它。

有没有人实现过这个并且正在将 JWT 与 Sails 和套接字一起使用?我很感激任何有关该往哪个方向的提示:)


我意识到我制定的使用express-jwt的政策对我来说太过抽象,所以我不知道到底发生了什么。当我查看其他示例时,我发现我只需要检查 websocket 请求与常规请求的不同之处,并且我很快找到了解决该问题的方法。

So:

  1. 设置令牌签名并在登录时发送
  2. Angular 获取令牌并保存到本地存储
  3. 为 HTTP 请求创建拦截器以添加授权标头和令牌
  4. 修复 sails.io.js 以转发通过选项提供的查询参数(如问题中所述)
  5. 使用 sails.io.js 连接时,发送令牌作为查询参数,即 url + '?token=' + token
  6. 在 sails 策略中,检查 token 的所有组合,包括 req.socket.handshake.query,如下所示:

    module.exports = function (req, res, next) {
    
    var token;
    
    if (req.headers && req.headers.authorization) {
    
        var parts = req.headers.authorization.split(' ');
    
        if (parts.length == 2) {
    
            var scheme = parts[0],
            credentials = parts[1];
    
            if (/^Bearer$/i.test(scheme)) {
                token = credentials;
            }
    
        } else {
            return res.json(401, {err: 'Format is Authorization: Bearer [token]'});
        }
    
    } else if (req.param('token')) {
    
        token = req.param('token');
        // We delete the token from param to not mess with blueprints
        delete req.query.token;
    
    }
    
    // If connection from socket
    else if (req.socket && req.socket.handshake && req.socket.handshake.query && req.socket.handshake.query.token) {
    
        token = req.socket.handshake.query.token;
    
    } else {
        sails.log(req.socket.handshake);
        return res.json(401, {err: 'No Authorization header was found'});
    }
    
    JWTService.verifyToken(token, function (err, token) {
    
        if (err) {
            return res.json(401, {err: 'The token is not valid'});
        }
    
        sails.log('Token valid');
    
        req.token = token;
    
        return next();
    
    });
    
    };
    

效果很好! :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SailsJS - 将 sails.io.js 与 JWT 结合使用 的相关文章

  • 使用 Socket.IO 的 Python 客户端到 nodeJS 服务器

    我正在尝试使用 socket io 将值从我的树莓派 在 python 2 7 9 中 发送到我的 nodeJS 服务器 我的目标是通过 websocket 连接从我的 pi 连续发送许多值到我的节点服务器 本地 该服务器应该获取这些值并将
  • 与 Socket.io 保持连接

    我正在尝试使用 asterisk websocket 连接socket io 客户端 https github com socketio socket io client socket io connect url transports w
  • 收到“错误”:“未知的身份验证策略\“jwt \””

    我正在使用 Express Mongoose Passport 和 JWT 实现授权功能 我可以正常注册用户 我能够验证并生成 JWT 我可以在 JWT 站点上解析它 但由于某种原因 我收到未知的身份验证策略错误消息 我将所有代码块放在 P
  • IDX10603:算法:“HS256”要求 SecurityKey.KeySize 大于“128”位。报告的密钥大小:“32”。参数名称:key.KeySize

    我刚刚使用 Asp Net Core Web API 并实现身份验证 我从 Angular 应用程序调用这个 API 但我总是收到如下错误 IDX10603 算法 HS256 要求 SecurityKey KeySize 大于 128 位
  • 如何在Python中使用JWK解码JWT令牌

    我正在开发一个应用程序 其中所有 API 都受 OAuth 保护 我已从客户端收到访问令牌 但无法解码和验证令牌 我有以下格式的 JWK keys kty RSA x5t S256 Some value e Some Value x5t S
  • 直接从令牌获取 JWT 声明,ASP Net Core 2.1

    我正在开发 ASP Net Core 2 1 Web API 我已经在我的项目中成功实施了 JWT 有了授权一切都可以正常工作 通常 当我需要用户声明时 我知道我可以这样获取它们 例如电子邮件声明 var claimsIdentity Us
  • 如何在没有身份验证的情况下打开我的应用程序 j hipster

    我创建了名为 Bookstore 的 j hipster 应用程序 运行我的应用程序后 它将进行身份验证 我不需要此身份验证 是否有任何方法可以在没有 j hipster 登录页面的情况下打开我的应用程序 在路径 app config 中有
  • 在 sails.js 中跟踪用户在线/离线状态

    我必须在我的 Web 应用程序中使用 sails js 中的 websockets 找出用户状态 即用户是否在线 离线 请帮我 多谢 从 Sails v0 9 8 开始 您可以使用onConnect and onDisconnect功能于c
  • { [FacebookTokenError:此授权码已被使用。]

    我有一个航行应用程序 我正在尝试实现 Facebook 登录 当我单击 使用 facebook 登录 按钮时 出现此错误 error A server error occurred in a request error FacebookTo
  • 从 Google Chat POST 请求验证 JWT

    我有一个 NodeJS 机器人使用 HTTPs 端点连接到 Google Chat 我正在使用快递来接收请求 我需要验证所有请求是否都来自 Google 并且希望使用 Google 随请求发送的不记名令牌来执行此操作 我的问题是我正在努力寻
  • Jwt 令牌是唯一的

    我正在使用 JWT 网络令牌系统 我能够成功生成令牌 我在 Laravel 中创建 JWT 令牌 如下所示 我正在使用以下技术堆栈 拉拉维尔 5 2 http laravel com 框架 JWT 包裹 https github com t
  • 上传中止导致 Sails js/Skipper 崩溃

    Ref https github com balderdashy skipper issues 49 https github com balderdashy skipper issues 49 适配器 船长 gridfs 基本控制器代码
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • IssuerSigningKeyResolver 调用异步方法

    我们使用 IssuerSigningKeyResolver 它是 Microsoft IdentityModel Tokens 的一部分 用于令牌验证并接受非异步委托 我们调用一个异步方法 这将导致阻塞调用 因此想知道使用它的正确方法是什么
  • 如何在 SoapUI 中测试使用 JWT 的 REST 服务?

    我正在实施一些 REST 服务 我所有的测试都是使用 SoapUI 进行的 最近 我决定采用 JSON Web Token JWT 进行身份验证 但我在 SoapUI 上找不到对此的任何支持 本机安装或插件 什么也没有 我发现了一些在线生成
  • 解析 JWT 令牌有效负载数据以获取 android/java 中的特定值[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我刚刚了解 JWT 想知道如何解析有效负载数据以使用密钥从中获取特定值 以下 JWT 令牌中的示例 e
  • 使用 Socket.IO 时如何访问会话标识符?

    我有一个聊天 我需要管理独特的连接 我四处搜寻 但我找到的解决方案似乎都已被弃用 那么 如何使用 Socket IO 获取套接字的会话 ID 我在用着Node js http en wikipedia org wiki Node js Ex
  • 使用 Socket.io 向多个房间发送消息?

    是否可以使用socket io向多个房间发送消息 发送至 1 个房间 io sockets in room emit id 发送到N个房间 io sockets in room1 room2 roomN emit id 是的 可以同时发送到
  • 我的客户端 socket.io 在哪里?

    我使用 Express 和 React Engine 创建了一个同构 React 应用程序 现在我正在尝试连接socket io 在快速设置中我有 var express require express var app express va
  • 没有 OAuth 的 Spring Security JWT

    最近我开始学习如何使用oauth 2 0 jwt配置spring boot 我有一个问题 是否可以使用spring boot security jwt避免oauth 2 0 是的 可以使用JWT无需使用标准化的功能OAuth 2 0 flo

随机推荐

  • 修改可变对象的方法?

    鉴于函数式编程在尽可能坚持不可变变量时是最好的 并且 Ramda 总是进行浅拷贝 那么对象如何must在大多数纯功能框架中处理可变的问题 例如 考虑 PIXI Sprite 在 pixi js 中 显示系统具有链接在一起的固有层次结构 并且
  • 在堆积条形图中添加组之间的间距

    假设我有一个带有分组条形的条形图 酒吧有一个大团体和多个非常小的团体 组标签位于组上 为了增加可读性 我想在组之间引入一定的间距 我使用以下代码和图像编辑器创建了一个示例图像 library ggplot2 g lt ggplot mpg
  • 指示函数使用“参数”对象的最清晰方法是什么?

    指示函数使用 参数 对象的最佳方式是什么 这显然是基于意见的 但是有任何约定吗 什么时候使用参数数组更好 一些例子 Function takes n arguments and makes them pretty function many
  • 如何将 JWT 令牌存储在仅 HTTP 的 cookie 中?

    我创建了一个应用程序 它仅使用服务器根据正确的登录凭据发送的 JWT 并对任何内容进行授权 api我的后端 Express js 服务器上的路由 另一方面 AngularJS 获取此令牌 将其存储在会话存储中 并每次都使用身份验证拦截器将令
  • 组件未显示在 Vue DevTools 中

    有人遇到过这个问题吗 我正在使用 Vue Devtools 但无法检查任何组件 因为没有显示任何组件 没有根组件或任何东西 几乎只是一个空白的开发工具 我是 Vue 新手 所以我确信我错过了一些明显的东西 我正在使用 webpack cli
  • Nestjs Config 访问引导级别的配置

    根据这个文档 https www npmjs com package nestjs config您在 AppModule 中导入您的配置 我正在尝试访问 main ts 文件中引导级别的配置 像这样的事情 const app await N
  • 可以从桌面应用程序调用 EJB 吗?

    我是 Java EJB 3 0 的新手 是否可以从桌面应用程序客户端调用部署在 JBoss 上的 会话 bean 提前致谢 是的你可以 这里有一些细节 参考 EJB2 但当涉及到远程客户端时 EJB3 也是如此 http www these
  • 将 Bing 地图引用添加到 Windows Phone 8.1 项目

    我想在 Windows Phone 8 1 C 项目中添加对 Bing 地图的引用 我已经安装了这个包http visualstudiogallery msdn microsoft com 224eb93a ebc4 46ba 9be7 9
  • 如何在 WP8 上打开 Facebook 应用程序以共享链接?

    我想知道如何打开官方 Facebook 应用程序以从 Windows Phone 上的 C 代码共享 URI 常见的 Uri Scheme 如下 fb 可以打开应用程序 但似乎没有参数起作用 我有这样的想法 但它对我不起作用 LaunchU
  • 如何引用类中最终静态字段的值?

    使用 JavaDoc 如何引用类中最终静态字段的值 我想要 在此示例中替换为字段的值STATIC FIELD This is a simple class with only one static field with the value
  • 我的安装程序如何有选择地删除一些最初并非创建的文件?

    我将所有程序的设置存储在 appdata 目录 appdata MyProgram 中 当出现问题而用户必须重新安装时 我想询问是否删除该目录中的数据 我正在使用 Inno Setup 并添加了一个自定义页面来提示用户 if DirExis
  • 从勤杂工到请求帖子的管道流

    I have multipart form data我要发布到快速端点 data upload 形成以下标记 form enctype multipart form data action data upload method post i
  • 如何在 WPF 中的多显示器显示上定位窗口?

    我正在尝试将一个窗口放置在辅助显示屏的右上角 在 Window Loaded 事件处理程序中 我有以下代码 private void Window Loaded object sender RoutedEventArgs e this Le
  • 如何更改 c++ 文件的 mach-o 可执行文件的入口点?

    我正在尝试编写一个没有 main 的 C 程序 是否可以将 mach o 可执行文件的入口点更改为自定义函数 除了main 如果没有的话 可以包起来吗main在实际的 C 之前调用我的 main 版本main叫做 Edit 我想要我的自定义
  • 设置 $.prop() 而不触发更改

    li li
  • 如何在 Jenkins 插件中将数据从 FileCallable 发送回 master 到记录器?

    我正在使用以下示例here http javadoc jenkins ci org index html hudson FilePath html void someMethod FilePath file make file a fres
  • 在运行时向窗体上的每个控件添加事件处理程序 VB6

    我有一个 VB6 应用程序 我希望其控件在应用程序范围内具有一致的行为 例如 其中一种行为是在文本框获得焦点时突出显示它 并在失去焦点时删除突出显示 我希望这种情况发生在每一种形式上 我想做的是拥有一个子过程 所有表单在加载时都可以调用该子
  • 监听 JBoss AS 6 中的登录事件

    我有一个在 JBoss AS6 中运行的应用程序 身份验证正在使用 FORM 身份验证方法进行 并且用户正在正确登录 我希望能够在用户成功登录时调用一段自定义的静态代码 不幸的是 我找不到任何侦听器 挂钩或回调 它们将在成功登录时执行代码
  • np.argsort 排除零值

    我有一个数组 0 2 0 0 0 0 3 0 0 0 0 4 我在用着np argsort对值进行排序并获取索引 所以 对于我的例子来说 它会是这样的 1 5 9 2 3 4 6 但是 我只想获取索引数组非零值 仅在我的示例中 1 5 9
  • SailsJS - 将 sails.io.js 与 JWT 结合使用

    我已经实现了一个 AngularJS 应用程序 使用 sails io js 通过 websockets 与 Sails 后端进行通信 由于后端基本上是一个纯 API 并且也会从其他应用程序连接 因此我尝试完全禁用会话并使用 JWT 我已经