Php 如何存储用户';将IP与他的访问令牌放在一起,然后在laravel API中验证他的令牌时将其与当前IP进行比较?
所以。。。我有一个前端应用程序,它向API发送请求,我正在用laravel编写 这是过于简化的laravel方法,用于创建访问令牌Php 如何存储用户';将IP与他的访问令牌放在一起,然后在laravel API中验证他的令牌时将其与当前IP进行比较?,php,laravel,api,oauth-2.0,laravel-passport,Php,Laravel,Api,Oauth 2.0,Laravel Passport,所以。。。我有一个前端应用程序,它向API发送请求,我正在用laravel编写 这是过于简化的laravel方法,用于创建访问令牌 $user = Auth::user(); $token = $user->createToken('authToken')->accessToken; 但是在创建这个令牌时,我想以某种方式将用户的IP存储到同一个DB记录中,laravel将存储新创建的访问令牌(位于这个SQL表中) 当用户请求一些“敏感”数据时,服务器应将用户当前发送这些请求的IP地
$user = Auth::user();
$token = $user->createToken('authToken')->accessToken;
但是在创建这个令牌时,我想以某种方式将用户的IP存储到同一个DB记录中,laravel将存储新创建的访问令牌(位于这个SQL表中)
当用户请求一些“敏感”数据时,服务器应将用户当前发送这些请求的IP地址与创建其访问令牌的IP地址进行比较
在创建访问令牌后,如果不更新DB记录或不创建新表,我是否可以将这些IP存储到数据库中,或者我是否必须自己编程整个访问令牌,并自己实现IP验证
另外,这个问题对我一点帮助都没有->每个经过身份验证的用户都有一个会话,所以您可以将IP保存到会话,稍后再检查 例如,获取当前IP:
$currentIp=Request::ip();
稍后,您可以获取另一个请求的IP,并将其与上次保存的请求进行比较
:
$old_ip=会话('ip',空);
$current_ip=Request::ip();
如果($old_ip==null){
会话(['ip'=>$current_ip]);
}else if($old_ip!=$current_ip){
Auth::logout();//安息吧
}
通过IP地址验证
我不得不说我同意rjdown的观点,我自己不会这么做。有IP白名单的标准解决方案
不过,您可以使用一种有趣的软件模式
首次收到访问令牌时生成声明
将IP地址视为一种声明,然后将其包含在API的声明对象中。当然,它不是高度安全/数字验证的声明,例如令牌的用户id。然后将声明缓存在内存中
实施IP地址筛选器
在每个后续API请求中,快速查找声明。然后运行一个筛选器类来比较原始请求和当前请求的IP
有关此设计模式的更多信息
session
时,我们指的是storage
,所以实际上session可以是任何类型的存储:数据库、内存数据库、Redis、纯文本文件、其他选项