【发布时间】:2017-07-05 17:53:04
【问题描述】:
我使用 Laravel 作为 API 和 AngularJs 作为前端。
从 API 中,数据是这样来的。
$data = [
'Token' => \Auth::guard("api")->user()->api_token,
];
return \Response::json([
'Status' => true,
'Message' => 'ok',
'Data' => $data,
], $Code);
在 AndularJs 控制器中,它被保存在下面的 cookie 中。
$cookies.put("Token", response.data.Data.Token);
然后从 cookie 中检索它是这样的
$cookies.get("Token");
我认为,这是安全问题,例如如果有人知道令牌,他们就会提交任何请求。
你能推荐更好的方法吗?
我们可以做类似...获取当前设备信息(android 或桌面等),然后将最终加密值(令牌 + 设备信息)保存到 cookie 或其他一些媒体中吗?然后在向api发送请求时......我们可以解密以确保这是否是被盗令牌......?有什么我可以使用的在所有设备中都是独一无二的吗?
【问题讨论】:
-
我目前使用的方法是让 PHP 中的会话存储令牌。当然,您想使用 angular,但也许您可以编写一些中间件,根据您的会话以及如果请求是 ajax/xhr,将令牌附加到您的请求中。我发现这也是一个有趣的主题,因此我提出了自己的问题:stackoverflow.com/questions/42250310/…
-
其实我关心的是......无论你从 api 发送什么到前端......都会保存在 cookie 或其他方式中......这里关心的是令牌在前端的安全性如何?
-
令牌不必到达浏览器,只有会话(not API)令牌必须存储在前端的某个位置(所以是 cookie)。但是在 laravel 中,这个 cookie 只是一个会话标识符(您的会话驱动程序是 not cookie,但如果是,它仍然会被加密)并且旁边将无法在您的外部读取域。
-
我们可以做类似...获取当前设备信息(android 或桌面等),然后将最终加密值(令牌 + 设备信息)保存到 cookie 或其他媒体中吗?然后在向api发送请求时......我们可以解密以确保这是否是被盗令牌......?有什么我可以使用的在所有设备中都是独一无二的吗?
-
这将是一个真正的自定义实现,虽然已经为您提供了更好的方法。让我们重复一遍:我认为最好让 Angular(完全是浏览器)知道 api 令牌,只需将其保留在服务器端并让会话处理前端的身份验证。
标签: angularjs laravel laravel-5.3 laravel-5.4