2017-10-20 225 views
0

我建立一个SPA与Laravel 5.5和角度4.我感到困惑的“最佳”(安全,可靠,最佳实践等)的方式进行身份验证的我的API请求。目前,我有一个传统的基于会话的登录系统,其中,在用户登录后,重定向到应用的整体,包含我的角应用 - 的索引页。所有后续与服务器的交互都是通过api调用完成的。发行,访问和使用API​​令牌与Laravel 5角4

遵循一些基本教程,我有以下设置:每个用户分配充当他们的API令牌60个字符的随机字符串。他们已经登录后,使用用户名和密码,该API令牌在头一个meta标签直接输出到HTML。然后Angular抓取这个令牌并将它传递给每个API调用的头部。

不过,我已经读过,令牌不应该通过非SSL连接传递(以避免中间人攻击),并且令牌应该被自动生成/设置为过期等。

所以我的问题:

  • 对于单页的应用程序,只使用内部API调用(不跨域)。它是合理的通过未加密的API令牌这样?
  • 是否OK /安全输出API凭证直接进入META标记中的HTML?

最后一点,这似乎是使用Laravel的CSRF令牌的标准做法吗?也许我刚读过太多偏执的博客文章?

回答

0

在现代网络编程中,你永远不会有太多的令牌。有访问令牌,刷新令牌,反XSRF令牌,等等。

这是我最近收到很多关于 的问题的最后一种类型的令牌。具体而言,在构建基于API的应用程序时,是否需要防止跨站点 请求伪造?

在任何浏览器都可以隐式验证用户身份的应用程序中,您需要防止跨站请求伪造。隐式身份验证发生在浏览器自动发送身份验证信息时发生,这是使用Cookie进行身份验证时的情况,也适用于使用Windows身份验证的应用程序。

通常,API不会使用Cookie进行身份验证。相反,API 通常使用承载令牌,并且在 浏览器中运行的自定义JavaScript代码必须通过明确将令牌添加到 请求来发送令牌。

然而,也有生活在同一个服务器进程作为一个Web应用程序中,并使用相同的cookie作为身份验证的应用程序的API。这是您必须使用防伪令牌来防止XSRF的情况。

您的项目或应用程序是:

  1. Laravel是你的API服务
  2. 角4是你的客户端应用程序

最好的办法是使用基于令牌服务和下面的链接用于创建令牌和身份验证令牌的laravel 5.5以及使用ap是:https://laravel.com/docs/5.5/passport

+0

感谢您的支持。我目前没有使用护照。我只是为每位用户创建自己的api_token,如本博客文章中所述:https://gistlog.co/JacobBennett/090369fbab0b31130b51 您认为这对于小规模SPA来说是否合理?在你看来,它可以输出令牌到html页面,然后用'document.getElementById(“token”)''来获取它。 – Inigo

+1

如果你的前端应用使用的是角度,最好的方法是使用角度内存储令牌一段时间的服务,任何时候你的应用需要通过api进行认证使用它,而不是在html页面内输出令牌对于基于api的应用程序是合理的,我也有类似的问题,总是用简单的方式来解决你的问题并不困难方式 – 2017-10-20 21:48:47

+0

最初你会如何得到令牌?如果您在应用第一次加载以请求当前用户的令牌时进行初始api调用,那么我认为api调用本身仍然需要以某种方式进行验证?将令牌输出到html有什么安全问题?谢谢 – Inigo