在 Rails + React 应用程序中 JWT 用于 Auth 有啥用

Posted

技术标签:

【中文标题】在 Rails + React 应用程序中 JWT 用于 Auth 有啥用【英文标题】:What's the use of JWT in Rails + React app for Auth在 Rails + React 应用程序中 JWT 用于 Auth 有什么用 【发布时间】:2020-01-15 00:09:18 【问题描述】:

我不明白 JWT 令牌的使用.. 谁能给我解释一下? 因为目前我正在开发一个应用程序(rails + react),我想使用 devise + jwt 进行身份验证并使用 React 进行前端。

其实我是这么理解的:

1/ 如果用户想登录:他完成了表单,React 从表单中获取数据并将这些信息发布到 Rails API 请求。

2/ Rails API 获取这些信息,如果信息与注册用户匹配,则在数据库中检查,如果匹配,则 Rails API 将创建一个 JWT 令牌并将此令牌发送到 React。 用户现在已登录,因为 Rails API 找到了匹配的用户。

3/ React 接收 JWT 令牌。 (??这个令牌的用途是什么??)

谢谢

【问题讨论】:

令牌用于所有连续的 API 调用,并在 HTTP 授权标头中传递它。每次允许 API 请求通过之前,服务器端都会验证令牌。 【参考方案1】:

既然你是 return api 。反应正在消耗它。 Jwt 帮助返回您可能需要在前端持久化以做出反应的数据。用户名或电子邮件等数据。 示例:使您的网站标题显示用户已登录。

【讨论】:

Jwt 存储在用户浏览器本地存储中。然后你可以从那里调用它,如果 jwt 中的数据用户名存在,那么在前端执行 soooooo 。在用户方面,它不需要要求 db 再次验证用户,但可以通过 jwt 如果还没有收到medium.com/@rajaraodv/… 您好,危险品,请注意:您可以edit 回答(和问题)以添加信息。这样做的好处是让读者更清楚地看到,因为 cmets 很快就会出现故障,有时还会被自动删除【参考方案2】:

我的回复并非针对Rails/React,而是针对所有使用 JWT 令牌的网络技术:

你说的是对的。从第 3 点开始,从 React 向 Rails 后端发出的所有请求都必须包含标头 Authorization: Bearer <token>

当 Rails 看到该标题时,它能够:

通过检查令牌的签名来检查令牌是否有效 对其进行解码并提取其中存储的任何信息。

请记住,JWT 令牌可以包含后端想要存储在其中的任何信息。而且客户端无法篡改,因为它是经过加密签名的,它会使它的签名无效。

上述属性(您可以在其中存储任何内容,前端随每个请求发送它并且没有人可以篡改它)帮助任何 Web 应用程序能够:

有一个shared nothing architecture - 因为会话完全存储在 UI 上,所以任何后端工作人员/机器都可以处理任何请求 在会话中存储more info,而不是在会话中使用signed cookies。

【讨论】:

好吧,将数据从后端发送到前端或前端到后端的最佳方式是发送 JWT 令牌? 仅适用于与会话相关的内容,例如用户信息和用户角色。有关其他信息,请使用 AJAX 或 websockets。 我可以用 Axios 代替 AJAX 吗? 是的,axios 发出 ajax 请求【参考方案3】:

既然你是 return api 。反应正在消耗它。 Jwt 有助于返回您可能需要在前端持久化以做出反应的数据。用户名或电子邮件等数据。 示例:使您的网站标题显示用户已登录。 jwt 在前端的主要目的基本上是 auth。 除了 。 如果您使用的是单体应用程序,您需要为用户处理会话 在反应情况下,jwt 代表会话

【讨论】:

【参考方案4】:

jwt 在前端的主要目的基本上是 auth 或其他。 除了 。如果您使用的是单体应用程序,请记住您为用户处理会话在反应情况下,jwt 代表会话

【讨论】:

以上是关于在 Rails + React 应用程序中 JWT 用于 Auth 有啥用的主要内容,如果未能解决你的问题,请参考以下文章

在 Knock (rails) 中验证用 RS256 签名的 JWT 令牌

Rails:使用敲门对 JWT 令牌进行身份验证

设置 JWT - 在标头中将令牌从服务器传递到客户端,但无法解析客户端中的标头

当 axios 在 React 中请求时,Ruby on Rails 的标头中不包含授权令牌,但它可以与 Postman 一起使用

Rails Turbo render_async:将 JWT 添加到异步请求

Rails:在开发中禁用敲击 JWT 身份验证