将API与Laravel网络应用程序分离后的基本身份验证


Basic Auth after separating API From Laravel Web App

我正在重构我的代码以从我的控制器中提取API。

事情在我的API中,通常需要知道用户的角色,以便我可以显示正确的数据,所以我需要用户的数据。

我的第一个想法是根据用户/密码使用基本身份验证对我的 API 访问进行身份验证。

我的第一个想法是实现一个过滤器,将所有 API 放在同一个路由组中。

中间件如下所示:

class simpleAuthMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  'Illuminate'Http'Request $request
     * @param  'Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return Auth::onceBasic('email') ?: $next($request);
    }
}

它有效,在执行请求时,一个基本的身份验证弹出窗口在导航过程中困扰着我。

然后,我尝试像这样使用 Guzzle:

$response = $client->request('GET', '/tournaments', [
        'auth' => [Auth::user()->email,
                   Auth::user()->password]
    ]);

我在实现它时遇到了一些问题,因为它适用于未加密的密码,而且我的数据库上只有加密密码。此外,我还管理来自谷歌/Facebook的社交名流身份验证的用户,这些用户没有密码。

然后我想我可以为每个用户放置一个令牌,并为我的 API 实现令牌安全性。但是令牌非常适合授予或不访问 API,但对我来说,它不应该用于检索用户数据。即使我选择 256 个字符的令牌,它也存在比 2 个用户获得相同令牌的远程可能性。此外,这意味着我应该在每个 API 调用中进行额外的查询以获取用户信息。

所以我需要做的是:

  1. 有一种安全的方式来在我的 Web 应用程序和 API 访问
  2. 中自动用户
  3. 可以访问 API 中的 Auth::user((

我需要的是简单的东西,问题似乎不太复杂。我看到Laravel Spark将处理JWT,所以我会尽量等到Spark发布。同时,知道我应该怎么做吗?

这样做

的方法是实现 JWT。使用此插件很容易使其工作

按照教程:AngularJS和Laravel应用程序的基于令牌的身份验证

了解智威汤逊:JSON Web 令牌剖析

您还可以使用 Auth0 API 非常轻松地做到这一点。它对小型系统是免费的。