在用户使用 google 登录(护照策略)后,在我当前的应用程序中,我在服务器上生成了一个 JWT 令牌,然后我不知道如何将其发回,同时还将用户重定向到前端网站。
在搜索时,我读到前端应该获取令牌,但这是否意味着我必须缓存 JWT 直到它被请求并设置一些带有密钥的 cookie 以在缓存中获取令牌?我试过这样做,但感觉就像我在重新发明轮子,让自己面临一些安全漏洞。
在用户使用 google 登录(护照策略)后,在我当前的应用程序中,我在服务器上生成了一个 JWT 令牌,然后我不知道如何将其发回,同时还将用户重定向到前端网站。
在搜索时,我读到前端应该获取令牌,但这是否意味着我必须缓存 JWT 直到它被请求并设置一些带有密钥的 cookie 以在缓存中获取令牌?我试过这样做,但感觉就像我在重新发明轮子,让自己面临一些安全漏洞。
不幸的是,接受的答案似乎没有回答这个问题。这是从前端(例如 Web 应用程序)发送到后端(API 或类似的)的一个很好的答案。
但我知道您想将令牌从后端发送到前端。在这种情况下,有几种方法可以传输该令牌。它们被 OAuth2 框架协议广泛使用。
这是最常用的技术之一。后端服务器使用查询字符串中的令牌生成重定向响应(状态代码 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
在前端,获取代码并向后端询问令牌(使用 fetch)
POST /give/me/the/token HTTP/1.1
Host: backend.com
Content-Type: application/json
{
"code": "xxxxxxx"
}
您必须考虑几个威胁。它们在RFC6819中进行了描述,但存在缓解措施。
此外,您应该看看RFC7636。该规范定义了一种code
通过使用在客户端生成的随机密钥来防止盗窃的方法。