【问题标题】:RESTful Authentication - Questions about the ProcessRESTful 身份验证 - 关于流程的问题
【发布时间】:2015-04-02 15:15:53
【问题描述】:

我发现网络安全是一个非常有趣的主题,我正在尝试学习如何制作 API 和 RESTful Web 服务。我正在阅读this answer,只是对 Way-2 中描述的过程有一些疑问。我了解 Way-2 的要点,但我从第 4 步开始有疑问。

首先让我们描述一下令牌变量。

$token = '123';
$tokenHashed = 'abc';
$tokenEncrypted = 'xyz';

在第 4 步,我们已经验证了用户,现在是时候创建一个令牌并将其与数据库中的该用户相关联,并将其发送给客户端。以下是我对该过程的疑问:

  1. 我们存储在数据库中的令牌,是“hashed(abc)”、“encrypted(xyz)”还是“neither(123)”?
  2. 当我们将其发送给客户端时,我们发送的是“hashed(abc)”、“encrypted(xyz)”还是“neither(123)”?
  3. 此令牌存储在客户端计算机的什么位置?我正在使用 PHP,所以它会在 $['SESSION'] 或 $['COOKIE'] 变量中吗?有关系吗?哪一个?为什么?

我认为这涵盖了第 4 步下的所有内容,所以让我们继续第 5 步。关于第 5 步,我担心的一件事是它说:“调用者然后发送此身份验证令牌......”我读过你从不传输令牌,所以这里还有一些问题(假设客户端以任何方式存储令牌,回答上述 2 状态):

  1. 客户端发送令牌“hashed(abc)”、“encrypted(xyz)”还是“neither(123)”?

    如果他们只是将它发回我们发送给他们的方式,那有什么意义呢?如果有人以我们发送的任何形式劫持令牌,它不总是与我们存储它的方式相匹配吗?例如,我向 USER X 发送一个随机散列字符串 (abc)。用户 Y 拦截并发送给我(abc)。我的数据库显示“abc”,安全失败。

随着答案的出现,我可能会继续开发/添加问题。感谢您的帮助!

【问题讨论】:

    标签: php rest authentication encryption restful-authentication


    【解决方案1】:

    JWT 是一种解决方案,REST API 是无状态的。这意味着来自客户端的每个请求都应包含处理请求所需的所有信息,因此 php 会话不合适。你可以阅读这个,Goodbye PHP Sessions, Hello JSON Web Tokens

    您不需要将 JWT Token 保存在您的数据库中,您只需要在服务器端生成一个带有密钥的令牌并发送给客户端,客户端应在每次请求时发送该令牌。

    浏览器可以将令牌保存在 html5 localStorage 或 cookie 中。

    服务器使用密钥解析加密的令牌,然后从令牌中获取信息。

    也许您可以在 JWT 令牌中保留一些消息,例如:

    1. 过期时间。
    2. 客户端IP。
    3. 类型。
    4. ...自定义消息。

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 2022-11-30
      • 2011-12-30
      • 1970-01-01
      相关资源
      最近更新 更多