首页 > 解决方案 > 如何在 laravel API 中验证他的令牌时将用户的 IP 与他的访问令牌一起存储,然后将其与他当前的 IP 进行比较?

问题描述

所以...我有一个前端应用程序,它向 API 发送请求,我正在用 laravel 编写它。

这是创建访问令牌的过度简化的 laravel 方式

$user = Auth::user();
$token = $user->createToken('authToken')->accessToken;

但是在创建这个令牌时,我想以某种方式将用户的 IP 存储到同一个数据库记录中,那个 laravel 将存储新创建的访问令牌(位于这个 SQL 表中oauth_access_tokens)。

当用户请求一些“敏感”数据时,服务器应将用户当前发送这些请求的 IP 地址与创建访问令牌的 IP 地址进行比较。

是否有可能在创建访问令牌或不创建新表后以某种方式更新数据库记录,我要将这些 IP 存储到其中,还是我必须自己编程整个访问令牌并自己实现 IP 验证也?

PS这个问题根本没有帮助我-> Laravel Passport: How to validate client IP when requesting API

标签: phplaravelapioauth-2.0laravel-passport

解决方案


通过 IP 地址验证

不得不说我同意 rjdown 的观点,我自己不会这样做。IP白名单有标准的解决方案。

不过,您可以使用一个有趣的软件模式。

在第一次收到访问令牌时构建声明

将 IP 地址视为一种声明,然后将其包含在 API 的声明对象中。当然,这不是一个高度安全/数字可验证的声明,例如令牌的用户 ID。然后在内存中缓存声明。

实现 IP 地址过滤器

在每个后续 API 请求中,快速查找声明。然后运行一个过滤器类来比较原始的IP和当前请求的IP。

有关此设计模式的更多信息


推荐阅读