ChatGPT解决这个技术问题 Extra ChatGPT

什么是基于令牌的身份验证?

我想了解基于令牌的身份验证意味着什么。我搜索了互联网,但找不到任何可以理解的内容。

我已经阅读了很多描述,但它们似乎都对具体细节很轻。这篇文章终于帮助了我:scotch.io/tutorials/the-anatomy-of-a-json-web-token
链接到 @ChrisConover 建议的博客 - How JSON web tokens came into existence?

A
Alex Martelli

我认为它解释得很好here——仅引用长篇文章的关键句子:

基于令牌的身份验证系统背后的一般概念很简单。允许用户输入他们的用户名和密码以获得允许他们获取特定资源的令牌 - 无需使用他们的用户名和密码。一旦获得了他们的令牌,用户就可以向远程站点提供令牌——它在一段时间内提供对特定资源的访问权限。

换句话说:为身份验证添加一个间接级别——用户不必为每个受保护资源使用用户名和密码进行身份验证,而是通过这种方式进行一次身份验证(在有限持续时间的会话内),作为回报获得一个限时令牌,并在会话期间使用该令牌进行进一步的身份验证。

优点很多——例如,用户一旦获得令牌,就可以将令牌传递到他们愿意在有限的时间和有限的资源集中信任但不愿意的其他自动化系统信任他们的用户名和密码(即,他们被允许访问的每个资源,永远或至少在他们更改密码之前)。

如果还有什么不清楚的地方,请编辑您的问题,以澄清您没有 100% 清楚了解的内容,我相信我们可以进一步帮助您。


我认为在 Web 应用程序中,来自远程网站的一个(或多个)cookie 执行令牌的功能是否正确?
由于令牌存储为 cookie,是否有任何措施可以阻止某人窃取该 cookie/令牌并自己使用它,从而诱使服务器认为他们是授权用户?显然,他们只能使用它 x 时间,但在此期间,他们可以造成他们需要的所有伤害。
这与 SessionAuthentication 有什么不同,其中用户可以通过输入他的用户名和密码来获取 session_id,然后在后续请求中使用这个 session_id?
如果令牌过期,用户是否必须再次登录才能获得新令牌?
@SaurabhVerma 它与会话不同,因为您不必将信息存储在 cookie 中。这对于移动设备来说非常有用,其中一些设备对 cookie 的使用有限制。
R
Ryan Wheale

来自Auth0.com

基于令牌的身份验证依赖于在每个请求上发送到服务器的签名令牌。使用基于令牌的方法有什么好处?跨域/CORS:cookie + CORS 在不同域之间不能很好地发挥作用。基于令牌的方法允许您对任何域上的任何服务器进行 AJAX 调用,因为您使用 HTTP 标头来传输用户信息。无状态(又名服务器端可扩展性):不需要保留会话存储,令牌是一个自包含的实体,可以传达所有用户信息。状态的其余部分存在于客户端的 cookie 或本地存储中。 CDN:您可以从 CDN 提供应用程序的所有资产(例如 javascript、HTML、图像等),而您的服务器端只是 API。解耦:您不受任何特定身份验证方案的约束。令牌可能会在任何地方生成,因此您的 API 可以通过单一方式对这些调用进行身份验证从任何地方调用。移动就绪:当您开始在本机平台(iOS、Android、Windows 8 等)上工作时,cookie 并不理想,而使用基于令牌的方法会大大简化这一点。 CSRF:由于您不依赖于 cookie,因此您不需要防止跨站点请求(例如,不可能同胞您的站点,生成 POST 请求并重新使用现有的身份验证 cookie,因为不会有)。性能:我们在这里没有提供任何硬性能基准,但网络往返(例如在数据库上查找会话)可能比计算 HMACSHA256 来验证令牌和解析其内容需要更多时间。


@Asik 当您开始处理令牌撤销,黑名单,回复攻击预防等时,除了“无状态”之外,这里的所有要点都是有效的。
被引用的网站推荐了一篇关于同一主题的较新文章:auth0.com/blog/cookies-vs-tokens-definitive-guide
只要您不需要“立即”撤销令牌,“无国籍”和“性能”就成立。否则,每个 api 调用至少需要一个 db 访问权限。
您可能想阅读“停止使用 JWT 进行会话”:cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions
链接现在已断开。
y
yfeldblum

token 是只有 Server X 可能创建的一段数据,其中包含足够的数据来识别特定用户。

您可以出示您的登录信息并向Server X索要token;然后您可能会展示您的 token 并要求 Server X 执行一些特定于用户的操作。

Token 是使用来自密码学领域的各种技术的各种组合以及来自更广泛的安全研究领域的输入创建的。如果您决定创建自己的 token 系统,那么您最好非常聪明。


通常,如果您想要基于令牌的身份验证,您应该从 OAuth 开始。
OAuth 在基于 Web 的应用程序中当然是可行的。但是,例如,操作系统登录会话也使用令牌系统,就像许多其他类型的软件程序一样,因此这个想法不限于 Web。
对于非公共客户支持系统,令牌可能也更可取。公司控制用户名/密码并发行和控制令牌。
P
Pang

令牌是服务器创建的一段数据,包含识别特定用户和令牌有效性的信息。令牌将包含用户的信息,以及一个特殊的令牌代码,用户可以使用支持身份验证的每种方法将其传递给服务器,而不是直接传递用户名和密码。基于令牌的身份验证是一种安全技术,它使用服务器提供的安全令牌对尝试登录服务器、网络或其他安全系统的用户进行身份验证。如果用户可以通过传递安全令牌向服务器证明他或她是有效用户,则身份验证成功。该服务验证安全令牌并处理用户请求。在服务验证令牌后,它用于为客户端建立安全上下文,因此服务可以为连续的用户请求做出授权决策或审计活动。

Source (Web Archive)


S
Sabito 錆兎 stands with Ukraine

基于令牌(安全/身份验证)

这意味着为了让我们证明我们已经访问,我们首先必须接收令牌。在现实生活中,令牌可能是建筑物的门禁卡,也可能是您家门锁的钥匙。为了让您取回办公室的钥匙卡或家中的钥匙,您首先需要证明您是谁,并且您确实有权使用该令牌。它可以是简单的事情,比如向某人展示您的 ID 或给他们一个秘密密码。所以想象一下我需要进入我的办公室。我下楼到安全办公室,向他们出示我的身份证,他们给了我这个令牌,让我进入大楼。现在我可以不受限制地在大楼内做任何我想做的事情,只要我随身携带我的令牌。

基于令牌的安全性有什么好处?

如果我们回想一下不安全的 API,在这种情况下我们必须做的是,我们必须为我们想做的所有事情提供密码。

想象一下,每次我们进入办公室的一扇门时,我们都必须给坐在门边的每个人我们的密码。现在这将是非常糟糕的,因为这意味着我们办公室内的任何人都可以获取我们的密码并冒充我们,这非常糟糕。相反,我们所做的是我们检索令牌,当然还有密码,但我们从一个人那里检索。然后我们可以在建筑物内的任何地方使用这个令牌。当然,如果我们丢失了令牌,我们就会遇到与其他人知道我们的密码相同的问题,但这会导致我们如何确保如果丢失令牌,我们可以撤销访问权限,也许token 不应该超过 24 小时,所以第二天我们来办公室,我们需要再次出示我们的 ID。但是,我们只向一个人出示了 ID,那就是坐在我们取回令牌的地方的保安。


门禁卡感觉像是代币的一个不好的类比——在证明我是谁并获得一张门禁卡之后,我可以自由地将它交给任何人,让他们随心所欲地进出。在访问时没有检查访问卡是否属于持有人。这不是更接近 API 密钥使用模式而不是令牌吗?
R
Ray Hulha

问题很老,技术也很先进,这是目前的状态:

JSON Web Token (JWT) 是一种基于 JSON 的开放标准 (RFC 7519),用于在 Web 应用程序环境中的各方之间传递声明。这些令牌被设计为紧凑、URL 安全和可用,尤其是在 Web 浏览器单点登录 (SSO) 上下文中。

https://en.wikipedia.org/wiki/JSON_Web_Token


我不认为 JWT 代表了实现基于令牌的身份验证的当前技术状态。它只是实现它的一种方式,并且存在许多缺陷,这些缺陷已被 cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions 等文章雄辩地提出
H
Hardik Patel

它只是与数据库中的用户或其他方式相关联的哈希。该令牌可用于验证并授权用户访问应用程序的相关内容。要在客户端登录时检索此令牌是必需的。首次登录后,您需要保存检索到的令牌而不是会话、会话 ID 等任何其他数据,因为这里所有内容都是访问应用程序其他资源的令牌。

Token用于保证用户的真实性。

更新:目前,我们拥有更先进的基于令牌的技术,称为 JWT(Json Web 令牌)。该技术有助于在多个系统中使用相同的令牌,我们称之为单点登录。

基本上基于 JSON 的令牌包含有关用户详细信息和令牌到期详细信息的信息。因此,如果令牌无效或根据详细信息过期,则该信息可用于进一步验证或拒绝请求。


R
RollingInTheDeep

当您注册一个新网站时,您通常会收到一封电子邮件以激活您的帐户。该电子邮件通常包含一个可供点击的链接。该链接的一部分包含一个令牌,服务器知道此令牌并可以将其与您的帐户相关联。令牌通常会有一个与之关联的到期日期,因此您可能只有一个小时来点击链接并激活您的帐户。使用 cookie 或会话变量,这一切都不可能实现,因为它不知道客户使用什么设备或浏览器来检查电子邮件。


一次性令牌/链接是与基于令牌的身份验证不同的概念。
你所说的名字也是象征性的。但这不是问题