Web services 在基于令牌的身份验证中,令牌如何得到验证?

Web services 在基于令牌的身份验证中,令牌如何得到验证?,web-services,authentication,jwt,Web Services,Authentication,Jwt,我读过很多关于基于令牌的身份验证的文章,它们通常无法解释服务器如何验证令牌。我明白: 用户请求使用用户名/密码进行访问 应用程序验证凭据 应用程序向客户端提供签名令牌 客户端存储该令牌并将其与每个请求一起发送 服务器验证令牌并用数据响应 但是步骤5具体是如何发生的呢?这取决于具体情况。令牌可以是用户名、密码和客户端生成的密钥的散列,它可以是随机的并存储在db中,这取决于它没有唯一的答案。令牌可以是用户名、密码和客户端生成的密钥的散列,它可以是随机的并存储在数据库中,对此没有唯一的答案。基于令牌的

我读过很多关于基于令牌的身份验证的文章,它们通常无法解释服务器如何验证令牌。我明白:

  • 用户请求使用用户名/密码进行访问
  • 应用程序验证凭据
  • 应用程序向客户端提供签名令牌
  • 客户端存储该令牌并将其与每个请求一起发送
  • 服务器验证令牌并用数据响应

  • 但是步骤5具体是如何发生的呢?

    这取决于具体情况。令牌可以是用户名、密码和客户端生成的密钥的散列,它可以是随机的并存储在db中,这取决于它没有唯一的答案。令牌可以是用户名、密码和客户端生成的密钥的散列,它可以是随机的并存储在数据库中,对此没有唯一的答案。

    基于令牌的身份验证术语可以在一些上下文中使用,因此答案始终取决于确切的问题。您确实用JWT()标记了您的问题,因此我将根据该标记绘制一些假设来回答这个问题

    JSON Web Token(JWT)是一种开放标准(),它定义了一种紧凑的、自包含的方式,用于在各方之间作为JSON对象安全地传输信息。此信息可以验证和信任,因为它是经过数字签名的。JWT可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对进行签名

    (重点是我的,来源:见上面的链接)

    这个定义为您提供了一些关于服务器应用程序如何验证令牌的确切问题。对于JWT,它通过检查关联的数字签名是否有效来实现;它实际上不仅仅是检查签名,但这是最重要的一步

    数字签名:一种密码方法,用于确定数字消息或一组文档是否真实、在传输过程中是否未被更改或篡改,以及是否来自已知发件人

    (来源:)

    您可以通过应用不同的算法对某些内容进行数字签名,但此过程可以在非常高的级别上进行描述,包括以下内容:

    • 选择一个只有您(您的服务器)知道的秘密
    • 将要签名的秘密和数据传递给给定的算法
    输出将包含一个签名,该签名随后可用于检查(如果您也知道该秘密)某些数据是否与最初生成签名的数据完全相同

    总之,服务器生成一个JWT,该JWT被签名、分发到任何客户端应用程序,只要服务器确保用于签名的秘密不为任何其他人所知,它就可以确保接收到的令牌未被篡改,并且实际上是由可信方发行的


    如前所述,服务器除了检查签名外,还可以进行进一步的验证,通常它至少还将验证令牌在生命周期方面是否仍然有效。建议这样做,因为此身份验证过程纯粹依赖于拥有令牌(通常称为承载令牌),这意味着如果攻击者能够获得令牌,则只能在配置的生命周期内使用该令牌。衍生的建议是,承载令牌的生命周期也应该相对较短。

    基于令牌的认证术语可以在一些上下文中使用,因此答案将始终取决于确切的问题。您确实用JWT()标记了您的问题,因此我将根据该标记绘制一些假设来回答这个问题

    JSON Web Token(JWT)是一种开放标准(),它定义了一种紧凑的、自包含的方式
    ,用于在各方之间作为JSON对象安全地传输信息。此信息可以验证和信任,因为它是经过数字签名的。JWT可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对进行签名

    (重点是我的,来源:见上面的链接)

    这个定义为您提供了一些关于服务器应用程序如何验证令牌的确切问题。对于JWT,它通过检查关联的数字签名是否有效来实现;它实际上不仅仅是检查签名,但这是最重要的一步

    数字签名:一种密码方法,用于确定数字消息或一组文档是否真实、在传输过程中是否未被更改或篡改,以及是否来自已知发件人

    (来源:)

    您可以通过应用不同的算法对某些内容进行数字签名,但此过程可以在非常高的级别上进行描述,包括以下内容:

    • 选择一个只有您(您的服务器)知道的秘密
    • 将要签名的秘密和数据传递给给定的算法
    输出将包含一个签名,该签名随后可用于检查(如果您也知道该秘密)某些数据是否与最初生成签名的数据完全相同

    总之,服务器生成一个JWT,该JWT被签名、分发到任何客户端应用程序,只要服务器确保用于签名的秘密不为任何其他人所知,它就可以确保接收到的令牌未被篡改,并且实际上是由可信方发行的

    如前所述,服务器除了检查签名外,还可以进行进一步的验证,通常它至少还将验证令牌在生命周期方面是否仍然有效。建议这样做,因为此身份验证过程纯粹依赖于拥有令牌(通常称为承载令牌),这意味着如果攻击者能够获得令牌,则只能在配置的生命周期内使用该令牌。一个衍生建议是,不记名持有人的寿命