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

How to send JWT to front end server after successful login for storage on localStorage?

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

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

您可以在 header 中发送 JWT 令牌或作为负载发送,在前端,您只需在将每个请求发送到服务器时将 JWT 令牌附加到服务器即可。服务器在将请求传递给下一个中间件之前应该具有验证逻辑,如果令牌有效,则请求将传递给下一个中间件,否则未授权将是 return.

您可以在 header 秒内发送令牌、负载、查询任何您喜欢的内容,但人们普遍在 Authentication 下的 header 中附加令牌。

我建议您查看 this link,它有使用 Node 和 Express 发送和验证 JWT 令牌的分步过程。

您还可以检查 this 节点并做出反应。

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

但我了解到您想将令牌从后端发送到前端。 在这种情况下,有几种方法可以传输该令牌。它们被 OAuth2 Framework 协议广泛使用。

使用回调 Uri

这是最常用的技术之一。后端服务器使用查询字符串中的令牌生成重定向响应(状态代码 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

兑换码

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

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

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

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。此规范定义了一种通过使用在客户端生成的随机密码来保护 code 免遭盗窃的方法。