我读过许多基于令牌的身份验证文章,它们通常无法解释服务器如何验证令牌。我了解到:
但是第5步是如何具体发生的呢?
发布于 2016-10-06 09:18:54
基于令牌的身份验证术语可以在一些上下文中使用,因此答案将始终取决于确切的问题。您确实用JWT (JSON Web令牌)标记了您的问题,所以我将根据这个标签画出一些假设来回答这个问题。
JSON (JWT)是一种开放标准(RFC 7519),它定义了一种紧凑和自包含的方式,用于安全地在各方之间传输信息作为JSON对象。此信息可以被验证和信任,因为它是数字签名的。JWT可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对进行签名。
(重点是我的,资料来源:见上文链接)
这个定义揭示了服务器应用程序如何验证令牌的确切问题。在JWT的情况下,它是通过检查相关的数字签名是否有效来实现的;它实际上不仅仅是检查签名,但这是最重要的一步。
数字签名:一种加密方法,用于确定数字消息或文档集是否真实,在传输过程中未被更改或篡改,是否来自已知的发件人。
(资料来源:Auth0恒等词)
您可以通过应用不同的算法对某些内容进行数字签名,但是可以在非常高的级别上描述此过程,包括以下内容:
输出将包含一个签名,然后可以用来检查(如果您也知道秘密的话)某些数据是否与最初生成签名的数据完全相同。
总之,服务器生成一个JWT,该JWT被签名、分发给任何客户端应用程序和,只要服务器确保用于签名的秘密不为其他任何人所知--可以确保接收到的令牌不被篡改,并且实际上是由可信方发出的。
如前所述,服务器除了检查签名外,还可以进行进一步的验证,通常它至少也会验证令牌在生存期内仍然有效。这是推荐的,因为这个完全依赖于拥有令牌(通常称为承载令牌)的身份验证过程意味着,如果攻击者能够获得令牌,它只能在配置寿命内使用该令牌。导出的建议是,不记名令牌的寿命也应该相对较短。
发布于 2016-10-05 00:52:24
那得看情况。令牌可以是用户名的散列、密码和客户端生成的密钥,它可以是随机的,存储在db中,没有唯一的答案。
https://stackoverflow.com/questions/39863840
复制相似问题