首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在基于令牌的身份验证中,如何验证令牌?

在基于令牌的身份验证中,如何验证令牌?
EN

Stack Overflow用户
提问于 2016-10-05 00:49:35
回答 2查看 493关注 0票数 1

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-06 09:18:54

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

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

(重点是我的,资料来源:见上文链接)

这个定义揭示了服务器应用程序如何验证令牌的确切问题。在JWT的情况下,它是通过检查相关的数字签名是否有效来实现的;它实际上不仅仅是检查签名,但这是最重要的一步。

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

(资料来源:Auth0恒等词)

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

  • 选择只有您(您的服务器)才会知道的秘密。
  • 将要签名的秘密和数据传递给给定的算法。

输出将包含一个签名,然后可以用来检查(如果您也知道秘密的话)某些数据是否与最初生成签名的数据完全相同。

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

如前所述,服务器除了检查签名外,还可以进行进一步的验证,通常它至少也会验证令牌在生存期内仍然有效。这是推荐的,因为这个完全依赖于拥有令牌(通常称为承载令牌)的身份验证过程意味着,如果攻击者能够获得令牌,它只能在配置寿命内使用该令牌。导出的建议是,不记名令牌的寿命也应该相对较短。

票数 0
EN

Stack Overflow用户

发布于 2016-10-05 00:52:24

那得看情况。令牌可以是用户名的散列、密码和客户端生成的密钥,它可以是随机的,存储在db中,没有唯一的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39863840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档