Php 实现JWT的最佳方法?

Php 实现JWT的最佳方法?,php,security,jwt,slim,Php,Security,Jwt,Slim,我正在创建JWT身份验证,我有一些疑问: 为了提高安全性,最好保存在数据库中 用户的令牌,并每次检查API是否发送了令牌 是否与保存到数据库中的匹配?它真的有用吗 为了避免在会话中保存用户信息,使用电子邮件, 如果他是JWT有效载荷中的管理员等 如果我将用户信息保存在JWT的负载中,并且用户更改了他的 电子邮件或其他信息,如何自动更新用户的 保存在浏览器中的令牌 最好将令牌保存为cookie或web存储 为了提高安全性,最好将其保存在数据库中 用户的令牌,并每次检查API发送的令牌是否匹配 把那

我正在创建JWT身份验证,我有一些疑问:

  • 为了提高安全性,最好保存在数据库中 用户的令牌,并每次检查API是否发送了令牌 是否与保存到数据库中的匹配?它真的有用吗

  • 为了避免在会话中保存用户信息,使用电子邮件, 如果他是JWT有效载荷中的管理员等

  • 如果我将用户信息保存在JWT的负载中,并且用户更改了他的 电子邮件或其他信息,如何自动更新用户的 保存在浏览器中的令牌

  • 最好将令牌保存为cookie或web存储

  • 为了提高安全性,最好将其保存在数据库中 用户的令牌,并每次检查API发送的令牌是否匹配 把那个保存到数据库里?它真的有用吗

    这完全违背了使用JWTs的目的。JWT的优点是您不必跟踪服务器端的会话——它们纯粹是客户端的。JWT的缺点是你不能因为这个(你支付的价格)而撤销代币。如果您想要额外的安全性,请不要使用JWTs并使用随机令牌(CSPRNG,128位)在服务器端跟踪会话

    为了避免在会话中保存用户信息,如果 他是JWT有效载荷中的管理员等? 如果我将用户信息保存在JWT的负载中,并且用户更改了他的 电子邮件或其他信息,如何自动更新用户的令牌 保存在他的浏览器中

    你可以用一个用户标识符代替电子邮件。例如,用户表的主键。然后,如果他们更新了他们的信息,令牌仍然有效。您应该设置较短的到期日期,因此如果用户不再是管理员,他们将必须请求新令牌(通常称为刷新令牌),并且新令牌将不具有管理员声明

    最好将令牌保存为cookie或web存储

    由你决定。如果存储在cookie中,则会随每个请求一起发送。如果希望使用JavaScript检索值,则使用web存储。如果使用cookie,请设置安全标志以防止它通过普通HTTP泄漏,并设置HttpOnly标志以保护它不受域上任何XSS漏洞的影响。Web存储不能以同样的方式针对XSS进行保护(您需要确保整个域都受到保护),但是通过普通HTTP泄漏的可能性较小

    为了提高安全性,最好将其保存在数据库中 用户的令牌,并每次检查API发送的令牌是否匹配 把那个保存到数据库里?它真的有用吗

    这完全违背了使用JWTs的目的。JWT的优点是您不必跟踪服务器端的会话——它们纯粹是客户端的。JWT的缺点是你不能因为这个(你支付的价格)而撤销代币。如果您想要额外的安全性,请不要使用JWTs并使用随机令牌(CSPRNG,128位)在服务器端跟踪会话

    为了避免在会话中保存用户信息,如果 他是JWT有效载荷中的管理员等? 如果我将用户信息保存在JWT的负载中,并且用户更改了他的 电子邮件或其他信息,如何自动更新用户的令牌 保存在他的浏览器中

    你可以用一个用户标识符代替电子邮件。例如,用户表的主键。然后,如果他们更新了他们的信息,令牌仍然有效。您应该设置较短的到期日期,因此如果用户不再是管理员,他们将必须请求新令牌(通常称为刷新令牌),并且新令牌将不具有管理员声明

    最好将令牌保存为cookie或web存储


    由你决定。如果存储在cookie中,则会随每个请求一起发送。如果希望使用JavaScript检索值,则使用web存储。如果使用cookie,请设置安全标志以防止它通过普通HTTP泄漏,并设置HttpOnly标志以保护它不受域上任何XSS漏洞的影响。Web存储不能以同样的方式针对XSS进行安全保护(您需要确保整个域都受到保护),但是通过普通HTTP泄漏的可能性较小。

    类似于@SilverlightFox的响应-请注意,您可能需要对刷新令牌进行数据库检查,但不需要访问令牌。通过这种方式,您可以调整持续时间,因为您希望在安全性和效率之间进行权衡

    类似于@SilverlightFox的响应-注意,您可能需要数据库检查刷新令牌,但不需要访问令牌。通过这种方式,您可以调整持续时间,因为您希望在安全性和效率之间进行权衡

    您是否阅读了
    jwt.io
    ?如果是-你为什么要问这个问题?有一件事:“我正在创建JWT身份验证”,请告诉我你没有自己的。请用。@ScottArciszewski。我用的是Firebase JWT。昨天,我开始阅读并创建我的第一个jwtauthentication@u_mulder:不,我不知道那个网站。你确定JWT适合你吗?你读过jwt.io吗?如果是-你为什么要问这个问题?有一件事:“我正在创建JWT身份验证”,请告诉我你没有自己的。请用。@ScottArciszewski。我用的是Firebase JWT。昨天,我开始阅读并创建我的第一个jwtauthentication@u_mulder:不,我不知道那个网站。你确定JWT适合你吗?