【问题标题】:Security Issue in Token in front end and API前端和 API 中的 Token 安全问题
【发布时间】: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


【解决方案1】:

我认为一个可能的解决方案是Laravel Passport。这样在前端存储client_idclient_secret,然后使用它们来交换授权令牌。

【讨论】:

  • 如果有人窃取了id和secret怎么办?
【解决方案2】:

必须将 TLS/SSL(HTTP over TLS 或 HTTPS)与 Web 令牌结合使用,以确保您的 API 和 Angular 客户端之间的通信安全,在大多数情况下就足够了,您可以通过加密来添加额外的层令牌有效负载本身使用 JSON Web 加密 (JWE) 规范,然后将其存储到您的 cookie 中。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多