在 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 令牌
设置 JWT - 在标头中将令牌从服务器传递到客户端,但无法解析客户端中的标头
当 axios 在 React 中请求时,Ruby on Rails 的标头中不包含授权令牌,但它可以与 Postman 一起使用