解决 laravel passport 'Key file "%s" permissions are not correct, should be 600 or 660

2023-09-05 16:07:01 浏览数 (4)

laravel passport

问题描述

这是我之前遇到的问题,忘记记录了。

环境:

  • laravel "5.3"
  • dingo Api
  • passport

我在做我自己的项目的时候,决定全部使用API风格,token鉴权的机制,这样就可以只写一份后端,而不考虑页面。问题就出现在这,我是使用windows进行开发,当我安装完laravel/passport的时候,访问报错'Key file "%s" permissions are not correct, should be 600 or 660 instead of 666',这显然是一个权限的问题,但是比较尴尬的是我在用windows,应该没涉及到什么权限的问题才对啊,毕竟windows的····(不能说坏话,万一我有一天去微软上班了呢)。

问题所在

  • 接下来是具体细节: 当我运行/oauth/authorize的时候,出现了permissions are not correct, should be 600 or 660 instead of 666这个错误,但是我使用的是windows系统,我根据错误信息找到了出问题的代码,在vendorleagueoauth2-serversrcCyptKey.php中,第50~59行
代码语言:javascript复制
            $keyPathPerms = decoct(fileperms($keyPath) & 0777);
            if (in_array($keyPathPerms, ['600', '660'], true) === false) {
                // @codeCoverageIgnoreStart
                trigger_error(sprintf(
                    'Key file "%s" permissions are not correct, should be 600 or 660 instead of %s',
                    $keyPath,
                    $keyPathPerms
                ), E_USER_NOTICE);
                // @codeCoverageIgnoreEnd
            }

在windows下,这里keyPathPerms确实是666,于是触发了这个报错。

接着,我给laravel/passport提了一个issues, https://github.com/laravel/passport/issues/712 ,但是没人回复。

由于这些包都是各种互相引入,所以我只能找到源头,他内置其实是这个包:

https://github.com/thephpleague/oauth2-server

所以我提了一个PR给他们:

https://github.com/thephpleague/oauth2-server/pull/901 ,只是想寻求一些帮助,或者告诉我win下的正确操作,或者告诉我我的错误,因为我认为他们这是硬编码,他们一定都鄙视windosw,哈哈。

我在PR中抛去了windows,既然你选择了windows,那就别怪我了。

在第51行改为:

代码语言:javascript复制
if (in_array($keyPathPerms, ['400', '440', '600', '660'], true) === false && strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {

ok,起码他为我工作了。

什么?不安全?不安全你还用windows。

0 人点赞