node.js - 登录成功后如何发送JWT到前端服务器存储到localStorage?

标签 node.js reactjs jwt passport.js passport-google-oauth2

在我当前的应用程序中,用户使用 google 登录后( Passport 策略),我在服务器上生成了一个 JWT token ,然后我不知道如何将其发回,同时将用户重定向到前端网站。

在搜索时我读到前端应该获取 token ,但这是否意味着我必须缓存 JWT 直到它被请求并使用 key 设置一些 cookie 以在缓存中获取 token ?我尝试这样做,但感觉就像是在重新发明轮子,让我自己暴露在一些安全漏洞面前。

最佳答案

不幸的是,接受的答案似乎没有回答这个问题。 这是从前端(例如 Web 应用程序)发送到后端(API 或类似应用程序)的一个很好的答案。

但我知道您想将 token 从后端发送到前端。 在这种情况下,有几种方法可以传输该 token 。它们被 OAuth2 框架协议(protocol)广泛使用。

使用回调 Uri

这是最常用的技术之一。后端服务器使用查询字符串中的 token 生成重定向响应(状态代码 303)。举个例子

HTTP/1.1 303 See Other
Location: http://frontend.org/?token=xxxxxxxxxxx

你也可以使用片段属性

HTTP/1.1 303 See Other
Location: http://frontend.org/#token=xxxxxxxxxxx

代码交换

另一种非常相似的方法是生成一个唯一且一次性使用的代码,该代码将使用其他请求交换 token 。

HTTP/1.1 303 See Other
Location: http://frontend.org/?code=xxxxxxxxxxx

在前端,获取代码并向后端请求 token (使用fetch)

POST /give/me/the/token HTTP/1.1
Host: backend.com
Content-Type: application/json

{
  "code": "xxxxxxx"
}

可能的威胁

您必须考虑多种威胁。它们在 RFC6819 中描述。 ,但存在缓解措施。

  • CSRF 攻击:应使用 state 参数 ( section 3.6 )
  • Open Redirector attacke:您不应允许客户端决定重定向 URI (section 4.1.5)

另外,你应该看看 RFC7636 .本规范定义了一种通过使用在客户端生成的随 secret 码来保护 code 不被盗的方法。

关于node.js - 登录成功后如何发送JWT到前端服务器存储到localStorage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70210620/

相关文章:

javascript - 带有回调的 Node Cron 在调用退出后出现 Cannot enqueue Handshake 错误

javascript - Redux #subscribe 与 #mapStateToProps

javascript - 无法访问 react-bootstrap-table 中的嵌套字段

javascript - 如何在 zip 下载开始后压缩 Node js 应用程序中的文件夹?

node.js - 从现有 Exe 创建适用于 Windows 应用商店的应用程序包

javascript - 点击刷新按钮时将 Web 存储存储的 JWT 发送到服务器

angularjs - 系统时间更改后 JWT 刷新

go - 登录后如何自动添加JWT?

node.js - 如何在具有 reactstrap 依赖项的 reactjs 应用程序中自定义 bootstrap 4?

reactjs - React 将登录链接更改为登录后注销