我正在重构我的代码以从我的控制器中提取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 调用中进行额外的查询以获取用户信息。
所以我需要做的是:
- 有一种安全的方式来在我的 Web 应用程序和 API 访问 中自动用户
- 可以访问 API 中的 Auth::user((
我需要的是简单的东西,问题似乎不太复杂。我看到Laravel Spark将处理JWT,所以我会尽量等到Spark发布。同时,知道我应该怎么做吗?
这样做
的方法是实现 JWT。使用此插件很容易使其工作
按照教程:AngularJS和Laravel应用程序的基于令牌的身份验证
了解智威汤逊:JSON Web 令牌剖析
您还可以使用 Auth0 API 非常轻松地做到这一点。它对小型系统是免费的。