【问题标题】:How to combine node express with passport providers and jwt?如何将 node express 与护照提供者和 jwt 结合起来?
【发布时间】:2016-09-25 15:21:31
【问题描述】:

我正在使用expressreact 编写一个单页网络应用程序。
我现在正在尝试选择对我的用户进行身份验证的方式。
我想让他们使用电子邮件和密码以及 Facebook、Google 等第三方提供商注册和登录...

我阅读了一些关于 passportjwtexpress-with-passportjwt-with-passport)的文章,但没有一篇文章结合了 jwt 和第 3 方提供商。

我能想到的唯一方法是将令牌保存在我的数据库中,并对每个请求进行比较(由第 3 方提供的令牌和我自己使用 jwt 生成的令牌)

将来自提供商的令牌保存在我的数据库中并与每个请求进行比较是有意义的,但使用jwt 我只需要验证令牌而不访问数据库。
如何区分我从客户那里收到的令牌?如何判断何时访问数据库(用于提供者令牌)以及何时使用jwt 进行验证?

编辑:

我考虑的实现方式如下:
- 用户名和密码:登录后,生成一个令牌(使用jwt)并将其发送给客户端。每个请求都将包含令牌,服务器将对其进行验证。
- 第三方提供者:假设用户通过Facebook 进行身份验证。我的服务器从Facebook 接收令牌(使用passport-js)。现在我需要向客户端发送它的令牌。我可以发送我刚刚从 facebook 收到的令牌,但是我如何验证客户端在每次请求之后发送给我的令牌?
所以我可以使用jwt 再次生成一个令牌并像上面描述的那样工作。

这是一个好的实现还是我遗漏了什么?我找不到 描述所有这些方面的完整教程。

【问题讨论】:

  • 尝试添加更多关于您不了解的内容的描述

标签: node.js express passport.js jwt


【解决方案1】:

您可以考虑根据应用程序的成功登录回调生成自己的令牌,而不是使用身份提供者可能给您的令牌。在每个滑动到期请求上发布新令牌,并可能考虑使用refresh tokens

在您的数据库中,您可以在给定用户(Facebook / Google / 等)登录时存储他们的身份验证方法。当您收到带有无效令牌的请求时,请从数据库中查询此身份验证方法,然后将它们重定向到相应的身份提供者以进行重新身份验证。

这将避免为您的应用程序进行大多数“正常”JWT 验证的数据库查找,并为您提供令牌无状态特性的全部好处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    相关资源
    最近更新 更多