Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/authentication/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 我能';我不能很好地理解JWT认证_Authentication_Token_Jwt_Http Token Authentication - Fatal编程技术网

Authentication 我能';我不能很好地理解JWT认证

Authentication 我能';我不能很好地理解JWT认证,authentication,token,jwt,http-token-authentication,Authentication,Token,Jwt,Http Token Authentication,现在许多开发人员使用JWT身份验证来授权api调用。 顺便说一下,如果黑客能够捕获经过身份验证的用户的api调用请求,那么他就可以拥有经过身份验证的JWT令牌。 然后黑客可以使用授权的JWT令牌访问此api,而无需进行身份验证。 这样行吗? 我想知道JWT认证实际上是安全的。 你能解释一下吗?jwt是一种代码,它包含关于用户身份和声明的信息,并且只在有限的时间内有效 除颁发令牌的授权端点外,任何人都无法读取或更改代码。因此,它是安全的,因为它不能被篡改。这意味着令牌可以被完全信任。您不必验证令牌

现在许多开发人员使用JWT身份验证来授权api调用。 顺便说一下,如果黑客能够捕获经过身份验证的用户的api调用请求,那么他就可以拥有经过身份验证的JWT令牌。 然后黑客可以使用授权的JWT令牌访问此api,而无需进行身份验证。 这样行吗? 我想知道JWT认证实际上是安全的。
你能解释一下吗?

jwt是一种代码,它包含关于用户身份和声明的信息,并且只在有限的时间内有效

除颁发令牌的授权端点外,任何人都无法读取或更改代码。因此,它是安全的,因为它不能被篡改。这意味着令牌可以被完全信任。您不必验证令牌,并且可以使用身份信息和声明,而无需咨询数据库

但这也是缺点。一旦颁发,令牌将一直有效,直到到期,因为到期时间无法更改。这就是令牌只能通过安全线路发送到服务器的原因。你不会希望黑客拦截令牌的

但如果真的发生了,那又怎么样

有几种选择。您可以使用短期令牌,这意味着令牌在发出后很短时间内过期。如果令牌被截获,它只在一小部分时间内有效。在这种情况下,你认为黑客可以在有限的时间内访问系统是理所当然的。这样做的好处是,您需要的资源更少,黑客的努力可能不值得

另一个选项是在每个请求上验证令牌。这需要更多的资源(例如数据库中的查找),尽管您可以使用某种缓存。如果某些内容发生更改,如ip地址,则可以使令牌无效。但问题是,你是否能检测到一个令牌是否是由黑客发送的

因此,这取决于所选择的策略。但是:如果您在未经验证的情况下发布长期访问令牌(因此不可能撤销该令牌),那么如果黑客获得访问令牌,您将遇到问题。所以你需要做点什么,以安全的方式使用它

虽然我认为这应该足以帮助您理解,但我想提及刷新令牌的使用。如果使用短期访问令牌,则可能需要实现长期刷新令牌。这些刷新令牌用于在新的访问令牌过期后获取该令牌。优点是不需要发送凭据,refesh令牌就足够了。但是,您只能在能够保密的应用程序中实现这一点。因为您肯定不希望黑客拦截(长期)刷新令牌


由于使用频率较低(与访问令牌相反),您可以添加逻辑以在使用时验证刷新令牌。您可以查阅数据库并决定拒绝请求(例如,当ip地址更改时)并撤销刷新令牌。在这种情况下,用户必须再次识别自己(发送凭据)。

JWT只是fsb服务器和客户端之间的安全消息传输工具,以便fsb服务器可以确定客户端是否登录;如果登录,fsb服务器将获取基于用户的个人唯一数据

  • 谷歌oauth

  • 只有当用户拥有google帐户并成功地正确输入gmail和密码时,G才会将用户gid发回我的服务器
  • 用户id保存在jwt的有效负载中
  • jwt

  • 如果google验证用户并返回gid
  • 创建jwt内容和内部维护:exp日期、加密
  • jwt发送并存储在用户浏览器的本地存储中
  • 每个用户的req将jwt发送回我的服务器
  • 我的服务器使用只有我的服务器拥有的secretrokey对jwt进行解码,并从jwt获取内容(uid)
  • 若uid在我的数据库中,那个么用户已经注册,现在已经登录
  • 将请求的数据从my db发送给用户,因为用户已登录
  • 如果由于错误的密码或G电子邮件导致使用未通过google验证,则不会创建jwt
  • JWT工艺

  • 用户的google弹出窗口登录
  • 谷歌服务器将信息返回到我的服务器。如果gid不在我的数据库中,我会将其保存在我的数据库中,以便用户可以注册
  • 创建jwt并添加uid作为内容。出口日期
  • jwt被发送并存储在用户浏览器的本地存储器中
  • 用户通过http请求页面,它包括jwt。我的服务器通过登录确定测试检查该用户是否登录:如果用户的JWTUID在我的数据库中,则表示该用户已登录。用户请求的数据将提供给用户。如果用户没有jwt或uid不匹配,则用户未登录,请将用户发送到登录页面
  • JWT描述


  • 这就是为什么您通过HTTPS通过加密连接运行所有流量。如果我们不使用HTTPS,JWT身份验证是不安全的?正确。JWT本身并不安全。因此,由用户来确保令牌的安全性。我不知道如何正确组织从我的笔记中获取的信息