Php 如何使身份验证令牌安全地工作?
我正在使用React Native/PHP/MySQL创建一个身份验证系统,其中包含以下步骤:Php 如何使身份验证令牌安全地工作?,php,react-native,authentication,token,Php,React Native,Authentication,Token,我正在使用React Native/PHP/MySQL创建一个身份验证系统,其中包含以下步骤: 用户登录:用户输入用户名和密码,在数据库中生成一个令牌,并在5分钟内过期 操作:如果用户希望执行除注销以外的任何操作,则会向API发送一个POST请求,其中包含操作和令牌 检查令牌:检查令牌是否有效(存在于数据库中),如果已过期,则更新过期时间,以及 执行操作 我有一些问题: 如果令牌重复?它是一个64个字符的标记,但应该始终能够复制 如果某人出于某种原因获得此令牌,则此人可以在用户帐户中执行多项操作
这是令牌身份验证系统的最佳方式吗?如果您想快速完成它,并且这不是为了好玩而做的事情,而是需要集成到项目中的事情,那么我会使用或使用一些类似的软件包,这些软件包已经存在 否则:
$token = md5(uniqid(mt_rand(), true));
为什么不让托克斯被复制是件好事?
如果数据库中有用户,则管理员和客户端将存储在同一用户表中。它们之间的区别是一个角色字段,用于定义它们是来宾、客户、管理员、纳兹古尔人、摄魂怪等
假设一个管理员得到了一个令牌(123),然后在另一个用户身上得到了一个令牌(123)——也许一个客户端也会得到同样的令牌(123)。在这种情况下,如果您检查API端点上的权限,对于请求,那么您必须将userID与令牌一起存储,并且在权限检查期间,您还必须添加额外的条件来检查userID,否则客户端可能会获得admin令牌,并使用它访问admin端点/函数
如果您没有在旧令牌过期后立即清除它们,那么在权限检查期间,检查器将返回过期的令牌,因此用户的权限将被拒绝
所以这不是必须的,但更简单
- 短期访问令牌和长期刷新令牌
- 短期访问令牌和无刷新令牌
- 非过期访问令牌
您可以阅读更多关于它们的信息为什么允许令牌复制?我可以用SELECT说一下数据库中是否生成了令牌吗?