php - 如何在 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
解决方案
通过 IP 地址验证
不得不说我同意 rjdown 的观点,我自己不会这样做。IP白名单有标准的解决方案。
不过,您可以使用一个有趣的软件模式。
在第一次收到访问令牌时构建声明
将 IP 地址视为一种声明,然后将其包含在 API 的声明对象中。当然,这不是一个高度安全/数字可验证的声明,例如令牌的用户 ID。然后在内存中缓存声明。
实现 IP 地址过滤器
在每个后续 API 请求中,快速查找声明。然后运行一个过滤器类来比较原始的IP和当前请求的IP。
有关此设计模式的更多信息
推荐阅读
- html - 导航菜单将一项向右对齐
- google-bigquery - bigquery:`string_value` 与 `string` 之间有什么区别
- git - “git clone”在.git/config 上抛出“文件已存在”错误?
- sqlite - sqlite在午夜时间的两次问题之间查找时间
- excel - 使用 VBA 将值复制到 Excel 表中而无需额外的行
- azure - AspNetCore AppSettings Azure DevOps
- terraform - Terraform 资源 aws_elastic_beanstalk_environment 和敏感数据
- iptables - strongswan ipsec 无法 ping 子网
- python - 视图 profile.views.ProfileDetailComment 没有返回 HttpResponse 对象。它返回 None 而不是
- elasticsearch - Elasticsearch 6.7 _reindex 操作不一致地报告映射器错误