如何在JWT中通过节点,ws和通行证使用身份验证Web套接字?

Znorg

我有一个用node / express编写的Web服务器,该服务器使用通行证通过JSON Web令牌(JWT)对用户进行身份验证。

对于常规的HTTP方法,这就是我使用的方法:

app.get('/api/stuff', isLoggedIn(), (req, res) => {
    //get stuff
    res.send( whatever );
});

isLoggedIn此功能在哪里

function isLoggedIn() {
    return passport.authenticate('local-jwt', { session: false });
}

身份验证本身由'local-jwt'使用JWTStrategy对象的通行证中配置处理,并且可以按预期工作。

现在,我需要向此应用添加网络套接字。我正在使用ws库。这是我到目前为止的内容:

const wss = new WebSocket.Server({
    port: 8080,
    verifyClient: async (info, done) => {
        // ???
        done( result );
    }
});

wss.on('connection', ws => {
    // web socket events
});

如何使用通行证身份验证仅允许具有正确令牌的客户端连接到Web套接字服务器?

戈切夫

您可以sign使用用户ID或其他用来区分用户的令牌

var today = new Date();
var exp = new Date(today);
exp.setDate(today.getDate() + 60);
jwt.sign({
        id: user._id,
        exp: parseInt(exp.getTime() / 1000),
    }, secret);

然后将令牌传递到前端,并使用它来初始化您的Websocket连接,并将其附加到url,然后像这样在服务器中对其进行解码

const wss = new WebSocket.Server({
  verifyClient: async (info, done) => {
    console.log(info.req.url);
    console.log('------verify client------');

    const token = info.req.url.split('/')[1];
    var decoded = jwt.verify(token, secret);

    info.req.user = await User.findById(decoded.id).exec();

    /*info.req.user is either null or the user and you can destroy the connection
     if its null */

    done(info.req);
  },
  server
});

这是许多方法之一。会话有一种方法,但是我看到您不想使用它们。另外,我不知道您是否使用mongo,但是对于任何数据库,都一样,只需要更改一些代码即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我是否需要使用快速会话以及通行证和JSON Web令牌进行身份验证?

来自分类Dev

节点通行证错误:未知身份验证策略“本地登录”

来自分类Dev

在nodejs身份验证中使用通行证的findById的替代方法?

来自分类Dev

通过iOS发送用户和通行证到网页

来自分类Dev

如何在iOS7中构建和打印存折的可扫描通行证

来自分类Dev

如何在Android中检测一日通行证

来自分类Dev

C中的套接字FTP:身份验证获得530“请以用户身份登录并通过”,匿名

来自分类Dev

分发通行证通行证

来自分类Dev

如何在节点+ Express应用中设置路由以通过身份验证方法?

来自分类Dev

通过Web套接字多次答复,而无Spring身份验证

来自分类Dev

应该如何在Django中实现基于JWT的身份验证(drf和simplejwt)?

来自分类Dev

如何在带有supertest,passport和JEST的cookie中使用jwt测试身份验证

来自分类Dev

如何在基于类的视图中使用 django REST JWT 授权和身份验证

来自分类Dev

如何在节点上使用pouchdb身份验证?

来自分类Dev

如何在 Python 请求中实际使用 DRF + JWT 身份验证

来自分类Dev

如何使用NTLM身份验证在节点js中调用SOAP Web服务

来自分类Dev

如何使用NTLM身份验证在节点js中调用SOAP Web服务

来自分类Dev

使用节点js,AngularJs和JWT的用户名和密码进行身份验证

来自分类Dev

节点路由通行证当前用户ID

来自分类Dev

如何对自定义套接字TCP协议使用证书身份验证?

来自分类Dev

如何在使用AngularFire的Firebase中通过用户身份验证使用路由?

来自分类Dev

验证静态路径,nodejs express通行证html

来自分类Dev

如何在EC2上安装通行证(密码存储)?

来自分类Dev

套接字上的身份验证方法

来自分类Dev

使用LLVM加定制通行证和定制库编译Apache服务器

来自分类Dev

如何使用通行证-ldapauth库在Nestjs应用中使用动态ldap配置选项?

来自分类Dev

如何通过Xamarin移动应用程序添加保存到手机的Google按钮和添加支付通行证

来自分类Dev

iOS:如何使用通行证将原始文件转换为 .pkpass / Sign manifest.json

来自分类Dev

加密通行证的重新哈希使用Node.js中的加密返回不同的结果

Related 相关文章

  1. 1

    我是否需要使用快速会话以及通行证和JSON Web令牌进行身份验证?

  2. 2

    节点通行证错误:未知身份验证策略“本地登录”

  3. 3

    在nodejs身份验证中使用通行证的findById的替代方法?

  4. 4

    通过iOS发送用户和通行证到网页

  5. 5

    如何在iOS7中构建和打印存折的可扫描通行证

  6. 6

    如何在Android中检测一日通行证

  7. 7

    C中的套接字FTP:身份验证获得530“请以用户身份登录并通过”,匿名

  8. 8

    分发通行证通行证

  9. 9

    如何在节点+ Express应用中设置路由以通过身份验证方法?

  10. 10

    通过Web套接字多次答复,而无Spring身份验证

  11. 11

    应该如何在Django中实现基于JWT的身份验证(drf和simplejwt)?

  12. 12

    如何在带有supertest,passport和JEST的cookie中使用jwt测试身份验证

  13. 13

    如何在基于类的视图中使用 django REST JWT 授权和身份验证

  14. 14

    如何在节点上使用pouchdb身份验证?

  15. 15

    如何在 Python 请求中实际使用 DRF + JWT 身份验证

  16. 16

    如何使用NTLM身份验证在节点js中调用SOAP Web服务

  17. 17

    如何使用NTLM身份验证在节点js中调用SOAP Web服务

  18. 18

    使用节点js,AngularJs和JWT的用户名和密码进行身份验证

  19. 19

    节点路由通行证当前用户ID

  20. 20

    如何对自定义套接字TCP协议使用证书身份验证?

  21. 21

    如何在使用AngularFire的Firebase中通过用户身份验证使用路由?

  22. 22

    验证静态路径,nodejs express通行证html

  23. 23

    如何在EC2上安装通行证(密码存储)?

  24. 24

    套接字上的身份验证方法

  25. 25

    使用LLVM加定制通行证和定制库编译Apache服务器

  26. 26

    如何使用通行证-ldapauth库在Nestjs应用中使用动态ldap配置选项?

  27. 27

    如何通过Xamarin移动应用程序添加保存到手机的Google按钮和添加支付通行证

  28. 28

    iOS:如何使用通行证将原始文件转换为 .pkpass / Sign manifest.json

  29. 29

    加密通行证的重新哈希使用Node.js中的加密返回不同的结果

热门标签

归档