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

csh*_*aby 489 security authentication token http-token-authentication

我想了解基于令牌的身份验证的含义.我搜索了互联网,但找不到任何可以理解的东西.

Ale*_*lli 519

我认为这里有很好的解释- 引用长文章的关键句子:

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

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

有许多优势-例如,用户可以通过该令牌,一旦他们知道的话,就到一些其他自动系统,他们愿意在有限的时间和有限的资源的信任,但将不会愿意信任他们的用户名和密码(即,他们被允许访问的每个资源,永远或至少在他们更改密码之前).

如果仍然不清楚,请编辑您的问题以澄清您不是100%明确的,我相信我们可以进一步帮助您.

  • 这与SessionAuthentication的不同之处在于,用户可以通过输入用户名和密码获取session_id,然后在后续请求中使用此session_id? (38认同)
  • 由于令牌存储为cookie,是否有任何可以阻止某人窃取该cookie /令牌并自行使用它,诱使服务器认为他们是授权用户?显然他们只能使用它达x个时间,但在此期间他们可以完成所需的所有伤害. (28认同)
  • @SaurabhVerma它与会话不同,因为您不必将信息存储在cookie中.这对于移动设备来说非常好,其中一些设备限制了cookie的使用. (12认同)
  • 我是否认为在Web应用程序中,来自远程网站的一个(或多个)cookie执行令牌功能? (5认同)
  • 如果令牌过期,用户是否必须再次登录才能获得新令牌? (4认同)
  • cookie 的问题是用户必须启用它们,否则您的身份验证将无法进行。我建议通过“Authorization”标头发送令牌来解决这个问题。此外,它非常适合 REST 服务,这些服务应该是无状态的,并且可以托管在不同的域中。 (3认同)
  • 您不需要将令牌存储在 cookie 中。您可以将其存储在本地存储中。 (2认同)

Asi*_*sik 175

来自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当你开始处理令牌撤销,黑名单,回复攻击预防等时,除了"无状态"之外,这里的所有积分都是有效的. (3认同)
  • 您可能需要阅读“停止使用JWT进行会话”:http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/ (2认同)
  • 链接现在已断开。 (2认同)

yfe*_*lum 92

A token是一段数据,它只能Server X创建,并且包含足够的数据来识别特定用户.

您可以提供您的登录信息并要求Server X提供token; 然后你可以展示你的token并要求Server X执行一些特定于用户的动作.

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

  • OAuth在基于Web的应用程序中肯定是可行的.但是,例如,操作系统登录会话也使用令牌系统,许多其他类型的软件程序也是如此,因此这个想法不仅限于Web. (5认同)
  • 通常,如果您需要基于令牌的身份验证,则应从OAuth开始. (4认同)

小智 40

令牌是由服务器创建的一段数据,包含用于标识特定用户和令牌有效性的信息.令牌将包含用户的信息,以及用户可以使用支持身份验证的每种方法传递给服务器的特殊令牌代码,而不是直接传递用户名和密码.

基于令牌的身份验证是一种安全技术,它使用服务器提供的安全令牌对尝试登录服务器,网络或其他安全系统的用户进行身份验证.

如果用户可以通过传递安全令牌向服务器证明他或她是有效用户,则认证成功.该服务验证安全令牌并处理用户请求.

在服务验证令牌之后,它用于为客户端建立安全上下文,因此服务可以为连续的用户请求做出授权决策或审计活动.

访问来源


Ahm*_*san 21

基于令牌(安全/认证)

意味着为了让我们证明我们可以访问,我们首先必须接收令牌.在现实生活中,令牌可能是建筑物的入口卡,它可能是锁定房屋的钥匙.为了让您检索办公室的钥匙卡或家中的钥匙,您首先需要证明您的身份,并且您实际上确实可以访问该令牌.它可能就像向某人显示您的ID或给他们一个秘密密码一样简单.所以想象一下,我需要进入我的办公室.我去安全办公室,向他们展示我的身份证,他们给了我这个令牌,让我进入大楼.现在,只要我有我的令牌,我就可以不受限制地在建筑物内做任何我想做的事情.

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

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

想象一下,每当我们进入办公室的门时,我们都必须给坐在门口的每个人密码.现在这将是非常糟糕的,因为这意味着我们办公室内的任何人都可以拿走我们的密码并冒充我们,这非常糟糕.相反,我们所做的是我们检索令牌,当然还有密码,但我们从一个人那里检索.然后我们可以在建筑物内的任何地方使用此标记.当然,如果我们丢失令牌,我们就会遇到同样的问题,就好像其他人知道我们的密码一样,但这会导致我们如何确保如果我们丢失令牌,我们可以撤销访问权限,也可能撤销令牌不应该活超过24小时,所以第二天我们来办公室,我们需要再次显示我们的身份证.但是,我们只会向一个人展示身份证,这就是我们检索令牌的保安人员.


Ray*_*lha 14

问题是旧的,技术已经发展,这是目前的状态:

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

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

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

Har*_*tel 7

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

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

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

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