Laravel Auth0 未授权用户

Posted

技术标签:

【中文标题】Laravel Auth0 未授权用户【英文标题】:Laravel Auth0 Unauthorized user 【发布时间】:2017-06-12 20:10:31 【问题描述】:

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

我正在使用 Chrome 邮递员来测试我的 api 上的路线。

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

这里是 Auth0JWTMIddleware 的句柄方法:

/**
     * @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 提供的文档进行操作,我还克隆了他们的示例项目,以确保配置正确,但不幸的是它也不起作用。关于如何解决我的问题的任何想法或想法?提前致谢!

【问题讨论】:

你好,我遇到了同样的问题,我通过 var_dumping 整个过程解决了这个问题,我发现我必须把 'secret_base64_encoded' => false 放在 laravel-auth0.php 中,如果这有帮助的话你 ! :) 【参考方案1】:

我遇到了同样的问题。为了解决,我必须改变两件事。感谢@Kangoo13 的第一个建议:

1;检查您的 config/laravel-auth0.php 文件中的 secret_base64_encoded = false。您会在密钥旁边的 Auth0 仪表板中注意到“客户端密码不是 base64 编码”

 'secret_base64_encoded'  => false,

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

在 JWTVerifier.php 中查看它似乎确实可以解决拼写错误的密钥,但它会默认为“HS256”,Auth0 指南明确指出您应该使用“RS256:”

 'supported_algs'        => ['RS256'],

希望有帮助!

【讨论】:

【参考方案2】:

我阅读了上面的suported_algs 问题,但略读阅读它并错过了你必须更正拼写才能使其工作的事实,在重新阅读之前花了额外的一天时间试图弄清楚它。希望下一个阅读它的人看到这个并且不会错过拼写问题!谢谢@user1286856

【讨论】:

以上是关于Laravel Auth0 未授权用户的主要内容,如果未能解决你的问题,请参考以下文章

未找到授权令牌 - Express-JWT 和 Auth0

auth0-js:UnauthorizedError:未找到授权令牌,但已登录

未授权客户端:客户端不允许授予类型“授权代码”。 Django -auth0 -login

验证授权和未授权用户 (JWT ReactJS-Laravel)

Auth0,带有授权扩展和 ASP.NET 授权

Auth0 Laravel:验证令牌并获取用户信息