You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Passport认证报错(CryptKey.php):密钥文件权限异常求解

解决Windows环境下Laravel Passport密钥文件权限错误的问题

嘿,这个问题我之前在Windows上部署Laravel Passport(1.x版本)时也踩过坑,核心原因是Windows的文件权限机制和Linux完全不同,Passport里的权限检查逻辑是针对Linux/Unix系统设计的,所以在Windows上会误报权限不符合要求。下面给你几个可行的解决办法:

方案一:修改文件的NTFS权限(推荐生产/开发环境通用)

Windows用的是NTFS ACL权限系统,我们需要手动把密钥文件的权限限制给指定用户:

  • 找到报错里的两个密钥文件:C:\wamp\www\project\public_html\storage\oauth-private.key 和 oauth-public.key
  • 右键文件 → 选择「属性」→ 切换到「安全」选项卡
  • 点击「编辑」按钮,删除所有除了你当前登录用户和「Administrators」组之外的用户权限
  • 确保只有你自己的账号(或者Wamp服务运行的账号,默认是当前用户)拥有该文件的读写权限
  • 应用设置后,重启Wamp的Apache服务,再测试API认证功能

方案二:临时绕过权限检查(适合开发环境快速解决)

如果只是开发环境想快速搞定,可以直接注释掉Passport里的权限判断逻辑:

  • 打开vendor/laravel/passport/src/CryptKey.php文件,找到第57行左右的权限检查代码
  • 把这段判断代码注释掉或者删除,原代码大概是这样:
if (! in_array(decoct(fileperms($this->path) & 0777), ['600', '660'])) {
    throw new InvalidKeyException("Key file \"{$this->path}\" permissions are not correct, should be 600 or 660 instead of " . decoct(fileperms($this->path) & 0777));
}
  • 保存文件后,错误就不会再出现了
  • 注意:这个方法是临时的,下次执行composer update时,修改的代码会被覆盖,所以生产环境不建议使用

方案三:重新生成密钥并设置权限

如果你的密钥是之前生成的,也可以重新生成后再设置权限:
在Wamp的命令行(进入项目根目录)执行:

php artisan passport:keys --force

生成新的密钥文件后,再按照方案一的步骤修改NTFS权限即可。

补充说明

为什么会出现这个错误?因为Laravel Passport的CryptKey类是按照Linux的文件权限逻辑来校验的——600表示只有文件所有者可读写,660表示所有者和组用户可读写,但Windows的fileperms()函数返回的权限数值和Linux不兼容,导致系统误判权限不符合要求。

内容的提问来源于stack exchange,提问作者zarpio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:21:26