【发布时间】: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