Session JWT和会话:如何正确使用JWT而不是会话

Session JWT和会话:如何正确使用JWT而不是会话,session,jwt,Session,Jwt,我正在用PHP和angular进行一个项目。对于用户登录,我们使用JWT。仍然无法理解为什么我们应该使用JWT而不是会话,如果每次用户浏览组件时,我们都需要将令牌发送到服务器代码以检查用户是否仍然登录 用户名和密码将被发送到服务器代码,在那里进行身份验证过程,然后生成一个令牌并将其发送回angular,然后保存在本地存储器中 关于如何正确使用JWT的任何评论 编辑 我的问题是关于当用户浏览站点并从一个组件转到另一个组件时检查JWT的过程。如果您将会话用于应用程序。。。然后,当水平扩展共享会话数据

我正在用PHP和angular进行一个项目。对于用户登录,我们使用JWT。仍然无法理解为什么我们应该使用JWT而不是会话,如果每次用户浏览组件时,我们都需要将令牌发送到服务器代码以检查用户是否仍然登录

用户名和密码将被发送到服务器代码,在那里进行身份验证过程,然后生成一个令牌并将其发送回angular,然后保存在本地存储器中

关于如何正确使用JWT的任何评论

编辑


我的问题是关于当用户浏览站点并从一个组件转到另一个组件时检查JWT的过程。

如果您将会话用于应用程序。。。然后,当水平扩展共享会话数据成为一种负担时……您要么需要一台专门的服务器。。Jwt是无状态的,没有此类要求。它包含以下数据

Header—JSON格式的有关签名算法、有效负载类型(JWT)等的信息

签名-嗯。。。签名


有效负载-如果您将会话用于应用程序,则JSON格式的实际数据(或声明,如果您愿意)

。。。然后,当水平扩展共享会话数据成为一种负担时……您要么需要一台专门的服务器。。Jwt是无状态的,没有此类要求。它包含以下数据

Header—JSON格式的有关签名算法、有效负载类型(JWT)等的信息

签名-嗯。。。签名


有效负载-JSON格式的实际数据(或声明,如果您愿意)已经是您的JWT身份验证的证明。因此,您必须随每个请求一起发送,但您可以简化服务器端的身份验证逻辑

登录时,您必须检查凭证,您可以依赖JWT的签名和
expiryDate
。如果签名仍然正确,则令牌有效,您无需再进行身份验证

关于你的横向认证。 如果需要对被调用的服务进行身份验证,则必须在每个请求上检查JWT的有效性(通常工作速度相当快)。如果存在开放api调用,当然可以忽略服务器端的JWT

在一天结束时,您的“会话”没有任何区别,它还将发送一些映射会话上下文的“秘密”密钥。因此,它也将被验证。 对于某些后端,您还可以使用JWT作为会话密钥,以使两个世界都参与进来

示例:

假设您有两个api根:

api/secured/*
api/open/*
(请注意,
安全的
打开的
仅用于说明)

受保护的
部分将包含您想要验证的所有服务。
open
部分可以包含不敏感的数据以及您的登录服务:

api/open/login -> returns your token
api/open/token/* -> refresh, check re-issue whatever you might need
现在让我们假设用户访问您的站点。如果他试图在没有正确JWT的情况下访问任何
api/secured/*
URL,您将需要证明身份验证错误。 在这种情况下,您可以将他重定向到您的登录,并在对他进行身份验证后创建一个令牌

现在,当他调用
api/secured/*
URL时,您的客户机实现必须提供JWT(Cookie、请求头等)。 根据您的框架、语言等,您现在可以在服务器端提供拦截器/过滤器/处理程序,用于检查:

  • 如果JWT存在
  • 如果签名有效(否则令牌是伪造的)
  • 如果JWT仍然有效(到期日)
  • 然后你可以相应地采取行动

    综上所述: 除非您想创建一个新的令牌,否则不需要进行“身份验证”。
    在所有其他情况下,检查JWT的有效性就足够了。您的JWT已经是您身份验证的证明。因此,您必须随每个请求一起发送,但您可以简化服务器端的身份验证逻辑

    登录时,您必须检查凭证,您可以依赖JWT的签名和
    expiryDate
    。如果签名仍然正确,则令牌有效,您无需再进行身份验证

    关于你的横向认证。 如果需要对被调用的服务进行身份验证,则必须在每个请求上检查JWT的有效性(通常工作速度相当快)。如果存在开放api调用,当然可以忽略服务器端的JWT

    在一天结束时,您的“会话”没有任何区别,它还将发送一些映射会话上下文的“秘密”密钥。因此,它也将被验证。 对于某些后端,您还可以使用JWT作为会话密钥,以使两个世界都参与进来

    示例:

    假设您有两个api根:

    api/secured/*
    api/open/*
    
    (请注意,
    安全的
    打开的
    仅用于说明)

    受保护的
    部分将包含您想要验证的所有服务。
    
    open
    部分可以包含不敏感的数据以及您的登录服务:

    api/open/login -> returns your token
    api/open/token/* -> refresh, check re-issue whatever you might need
    
    现在让我们假设用户访问您的站点。如果他试图在没有正确JWT的情况下访问任何
    api/secured/*
    URL,您将需要证明身份验证错误。 在这种情况下,您可以将他重定向到您的登录,并在对他进行身份验证后创建一个令牌

    现在,当他调用
    api/secured/*
    URL时,您的客户机实现必须提供JWT(Cookie、请求头等)。 根据您的框架、语言等,您现在可以在服务器端提供拦截器/过滤器/处理程序,用于检查:

  • 如果JWT存在
  • 如果签名有效(否则令牌是伪造的)
  • 如果JWT仍然有效(到期日)
  • 然后你可以相应地采取行动

    综上所述: 除非您想创建一个新的令牌,否则不需要进行“身份验证”。 在所有其他情况下,我