繁体   English   中英

RESTful身份验证-有关流程的问题

[英]RESTful Authentication - Questions about the Process

我发现Web安全是一个非常有趣的主题,并且我正在尝试学习如何制作API和RESTful Web Services。 我正在阅读此答案,并且对Way-2中描述的过程有一些疑问。 我了解Way-2的要旨,但是我在第4步开始提出疑问。

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

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

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

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

我认为这涵盖了第4步中的所有内容,所以让我们继续第5步。与我有关的第5步问题是,它说:“调用者然后发送此auth令牌...”我读到您永远不会发送令牌,因此这里会出现更多问题( 假设客户端以任何方式存储令牌都可以回答上述两种状态 ):

  1. 客户端是否发送令牌“ hashed(abc)”,“ encrypted(xyz)”或“ nether(123)”?

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

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

JWT是一种解决方案,REST API旨在实现无状态。 这意味着来自客户端的每个请求都应包含处理该请求所需的所有信息,因此php会话不合适。 您可以阅读《 再见PHP会话》,《 Hello JSON Web令牌》

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM