【问题标题】:Are Both Access Tokens + Access Token Secret Really Necessary?Access Tokens + Access Token Secret 真的有必要吗?
【发布时间】:2021-02-07 11:23:11
【问题描述】:

我正在构建一个 API,它允许我们的客户以编程方式与我的 PHP 应用程序交互。在阅读this question 之后,我似乎应该为我的应用程序的用户提供两个键:

1) access token secret(一个非常长的随机字符串)

2) access token(更短的随机字符或数字字符串)

这两个令牌背后的想法是让客户端使用access token secret 签署(加密)他的请求并将请求传输到我们的服务器。但是,由于请求是加密的,因此服务器无法在不首先确定哪个客户端发送请求的情况下解密消息。 “访问令牌”的目的是帮助服务器轻松识别(查找)使用哪个客户端的“访问令牌秘密”来解密消息。显然,客户端不应该在请求中发送实际的访问令牌秘密,因为这将允许攻击者在他不知情的情况下拦截客户端的秘密令牌并代表他签署消息。这是正确的吗?

假设我的理解是正确的,为什么不让客户简单地使用他的用户名(他通常用来登录他的在线帐户的用户名)而不是生成自定义访问令牌?

【问题讨论】:

  • 所以关键是访问令牌可由服务器识别,但不是人类可读可识别的,因此为了能够通过访问令牌识别某人,他们需要访问令牌和链接的后端数据库两条记录。这是一种非常常见的安全实践,您永远不会仅仅依赖一种安全方法。但是您也可以将它们用于特定于应用程序,因此如果另一个应用程序试图劫持访问令牌,它将无法正常工作。
  • @Barkermn01 啊,所以基本上我们不希望潜在的对手能够识别请求的发送者,即使他无法解密消息?据推测,这将是一个安全风险,因为如果他能够识别发送请求的客户,他可能能够推断出有关发送者的其他信息(例如,请求是由拥有大量资金的客户发送的,并且很快)?一旦他知道了这个信息,他就可以用它来确定继续攻击这个客户端是否有意义..
  • 是的,它还可以用于将访问令牌限制为特定应用程序,如果通过 javascript 或 IP 如果来自服务器端技术,则通过 Origin 标头表示,因此示例是发送 client_id 的请求请求的密钥,访问令牌仅限于该 client_id,并且该客户端仅允许从特定来源使用,您可以帮助保护访问。

标签: php laravel rest laravel-5


【解决方案1】:

每个帐户在任何给定时间都可能有许多访问令牌,每个令牌都有自己的秘密。这样做有几个好处,包括:

  • 为特定目的确定特定令牌的范围,以限制访问。 (也许一个系统需要读取/写入所有内容的权限,但也许其他一些系统只需要读取 API 的一部分。)

  • 监控。 (查看什么使用什么、什么时候、什么时候使用不同的令牌要容易得多。)

  • 替换令牌。您不希望在部署新密钥时停机,因此您可以同时激活多个密钥,然后再禁用旧密钥。

您所使用的系统可能还有其他特定原因。例如,在我的例子中,密钥 ID 在验证秘密方面发挥了作用。

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2018-04-16
    • 2017-10-17
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多