Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使身份验证令牌安全地工作?_Php_React Native_Authentication_Token - Fatal编程技术网

Php 如何使身份验证令牌安全地工作?

Php 如何使身份验证令牌安全地工作?,php,react-native,authentication,token,Php,React Native,Authentication,Token,我正在使用React Native/PHP/MySQL创建一个身份验证系统,其中包含以下步骤: 用户登录:用户输入用户名和密码,在数据库中生成一个令牌,并在5分钟内过期 操作:如果用户希望执行除注销以外的任何操作,则会向API发送一个POST请求,其中包含操作和令牌 检查令牌:检查令牌是否有效(存在于数据库中),如果已过期,则更新过期时间,以及 执行操作 我有一些问题: 如果令牌重复?它是一个64个字符的标记,但应该始终能够复制 如果某人出于某种原因获得此令牌,则此人可以在用户帐户中执行多项操作

我正在使用React Native/PHP/MySQL创建一个身份验证系统,其中包含以下步骤:

  • 用户登录:用户输入用户名和密码,在数据库中生成一个令牌,并在5分钟内过期

  • 操作:如果用户希望执行除注销以外的任何操作,则会向API发送一个POST请求,其中包含操作和令牌

  • 检查令牌:检查令牌是否有效(存在于数据库中),如果已过期,则更新过期时间,以及 执行操作

  • 我有一些问题:

  • 如果令牌重复?它是一个64个字符的标记,但应该始终能够复制
  • 如果某人出于某种原因获得此令牌,则此人可以在用户帐户中执行多项操作。所以我在考虑续约 令牌生成另一个过期案例,这是最好的方式吗

  • 这是令牌身份验证系统的最佳方式吗?

    如果您想快速完成它,并且这不是为了好玩而做的事情,而是需要集成到项目中的事情,那么我会使用或使用一些类似的软件包,这些软件包已经存在

    否则:
  • 确保您的代币是唯一的是一个很好的做法。您可以将表的字段设置为唯一,这样当您试图保存它时,如果它存在,您将得到一个错误,您可以生成另一个错误。(1)或者您可以创建一个算法,以确保该令牌在数据库中不存在。为此,您可以为令牌哈希算法使用时间戳和userID
  • 例如:

    $token = md5(uniqid(mt_rand(), true));
    
    为什么不让托克斯被复制是件好事?

    如果数据库中有用户,则管理员和客户端将存储在同一用户表中。它们之间的区别是一个角色字段,用于定义它们是来宾、客户、管理员、纳兹古尔人、摄魂怪等

    假设一个管理员得到了一个令牌(123),然后在另一个用户身上得到了一个令牌(123)——也许一个客户端也会得到同样的令牌(123)。在这种情况下,如果您检查API端点上的权限,对于请求,那么您必须将userID与令牌一起存储,并且在权限检查期间,您还必须添加额外的条件来检查userID,否则客户端可能会获得admin令牌,并使用它访问admin端点/函数

    如果您没有在旧令牌过期后立即清除它们,那么在权限检查期间,检查器将返回过期的令牌,因此用户的权限将被拒绝

    所以这不是必须的,但更简单

  • 对于令牌到期,您有3个选项。这些措施如下:
    • 短期访问令牌和长期刷新令牌
    • 短期访问令牌和无刷新令牌
    • 非过期访问令牌

  • 您可以阅读更多关于它们的信息

    为什么允许令牌复制?我可以用SELECT说一下数据库中是否生成了令牌吗?