漏洞总结 漏洞概述 在 Laravel Passport 中,当应用程序使用整数(非UUID)作为主键时,存在一个逻辑缺陷。如果用户的 ID 恰好等于密码授权客户端(password grant client)的 ID, 方法会错误地返回 ,导致用户无法通过 Bearer Token 进行认证。这是因为代码中包含了一个过于宽泛的检查,旨在拦截 类型的令牌(此类令牌无关联用户),但在整数ID场景下误判了合法的密码授权令牌。 影响范围 使用整数(非UUID)作为 和 表主键的 Laravel Passport 应用程序。特别是当用户 ID 与客户端 ID 数值相同时。 修复方案 修改 中的逻辑。不再单纯比较用户ID和客户端ID,而是增加对 (授权类型)的检查。只有当授权类型为 时,才执行该ID匹配检查并返回null;对于其他类型(如 ),即使ID匹配也不应返回null。 相关代码块 (Problem) 复现步骤 (Reproduction Steps) 1. 为 和 表使用整数(非UUID)主键。 2. 创建一个密码授权客户端,使其自增ID为 'N'。 3. 创建一个ID为 'N' 的用户。 4. 为该用户获取一个通过密码授权获得的访问令牌。 5. 发起一个认证请求——Guard返回null,请求被拒绝(401)。