Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel Auth0未经授权的用户_Php_Angularjs_Laravel_Jwt_Auth0 - Fatal编程技术网

Php Laravel Auth0未经授权的用户

Php Laravel Auth0未经授权的用户,php,angularjs,laravel,jwt,auth0,Php,Angularjs,Laravel,Jwt,Auth0,我的应用程序是一个单页应用程序,客户端使用Angular 1.x,服务器/api使用Laravel 5.3。我很容易地使Auth0身份验证在我的客户端(angular)上工作,它成功地生成了一个令牌。转到我的api(laravel),不幸的是,即使存在授权头,我也无法访问受auth0.jwt中间件保护的任何路由。它的响应是一个简单的文本,上面写着未经授权的用户 我正在使用Chrome postman在我的api上测试路由。 我试图通过检查vendor\auth0\login\src\auth0

我的应用程序是一个单页应用程序,客户端使用Angular 1.x,服务器/api使用Laravel 5.3。我很容易地使Auth0身份验证在我的客户端(angular)上工作,它成功地生成了一个令牌。转到我的api(laravel),不幸的是,即使存在授权头,我也无法访问受
auth0.jwt
中间件保护的任何路由。它的响应是一个简单的文本,上面写着
未经授权的用户

我正在使用Chrome postman在我的api上测试路由。

我试图通过检查
vendor\auth0\login\src\auth0\login\Middleware\Auth0JWTMiddleware.php
来跟踪负责响应的函数,并发现正在抛出
CoreException

以下是Auth0JWT中间件的句柄方法:

/**
     * @param $request
     * @param \Closure $next
     *
     * @return mixed
     */
    public function handle($request, \Closure $next)
    {
        $auth0 = \App::make('auth0');

        $token = $this->getToken($request);

        if (!$this->validateToken($token)) {
            return \Response::make('Unauthorized user', 401);
        }

        if ($token) {
            try {
                $jwtUser = $auth0->decodeJWT($token);
            } catch (CoreException $e) {
                return \Response::make('Unauthorized user', 401);
            } catch (InvalidTokenException $e) {
                return \Response::make('Unauthorized user', 401);
            }

            // if it does not represent a valid user, return a HTTP 401
            $user = $this->userRepository->getUserByDecodedJWT($jwtUser);

            if (!$user) {
                return \Response::make('Unauthorized user', 401);
            }

            // lets log the user in so it is accessible
            \Auth::login($user);
        }

        // continue the execution
        return $next($request);
    }
我怀疑从Auth0生成的令牌有更新的算法或其他东西,而Laravel Auth0包还不支持它


我完全遵循了Auth0提供的文档,还克隆了他们的示例项目,只是为了确保配置正确,但不幸的是,它也不起作用。关于如何解决我的问题,有什么想法或想法吗?提前谢谢

我也有同样的问题。有两件事我必须改变才能解决。第一个建议归功于@Kangoo13:

一,;在config/laravel-auth0.php文件中检查secret\u base64\u encoded=false。您会注意到,在Auth0仪表板中,在密钥旁边,它声明“客户端密码不是base64编码的”

二,;在同一配置文件中,检查“受支持”的拼写是否正确。如果您在运行composer之后应用了默认的配置文件,那么很可能有人输入了错误的“支持”,这是错误的

在JWTVerifier.php中查看,它看起来确实适合拼写错误的密钥,但它将默认为“HS256”,Auth0指南明确指出您应该使用“RS256:

 'supported_algs'        => ['RS256'],

希望有帮助

我读了上面的
suported_algs
一期,但略读了一下,错过了一个事实,那就是你必须纠正拼写才能正常工作,在重读之前花了额外的一天时间试图弄清楚它。希望下一个阅读它的人看到这一点,不要错过拼写问题!谢谢@user1286856

您好,我也遇到了同样的问题,我通过var_转储整个过程解决了这个问题,我发现我必须在laravel-auth0.php中输入'secret_base64_encoded'=>false,如果这对您有帮助的话!:)
 'supported_algs'        => ['RS256'],