Symfony - 使用REST进行身份验证的最安全方式?

时间:2018-02-06 02:40:27

标签: rest session authentication angular5 symfony4

我正在尝试使用Angular 5和Symfony 4构建概念验证。我需要将后端与前端分离,以便我可以专注于为前端完全使用JS并且能够升级应用程序和其他类型的客户端。

因此我在Symfony上构建RESTful API。我设法从正面到背面发送凭据......这几乎是我设法做的事情,因为我不知道如何继续下一步。

Symfony应该获取登录数据,以某种方式调用服务进行验证,并正确响应前端。这样做最安全的方法是什么?我已经阅读了很多关于JWT以及它如何不适合这个用例的内容,显然OAuth2仅适用于授权而不是身份验证,除非您使用OpenId Connect。我读过最简单的方法是创建一个会话ID +一个CSRF令牌并将其存储在一个cookie中(我不在乎这是否会破坏无状态,确保系统安全更重要) 。我认为后者可以透明地完成,但我不知道如何做前者。

事实上,我完全迷失了。我不知道从哪里开始,我已经被困了好几天,这个任务似乎太过分了。我甚至建议使用Laravel,但我甚至不知道从哪里开始,这在我第一次尝试实现REST API时是合法的,所以它非常令人生畏。

我应该在这做什么?

编辑:以下是我为JWT进行身份验证的一些原因。

  

想要使用JWT而不是OpenID Connect就像想要在没有SAML协议的情况下使用SAML断言。1

(这可能会让我使用OpenID Connect作为我的解决方案)

  

无状态JWT令牌无法失效或更新,并会根据您存储它们的位置引入大小问题或安全问题。有状态的JWT令牌在功能上与会话cookie相同,但没有经过实战考验和经过良好审核的实施或客户支持。2

     

不幸的是,攻击者可以滥用此功能。如果服务器期望使用RSA签名但实际上收到使用HMAC签名的令牌,则会认为公钥实际上是HMAC密钥。3

     

这不仅仅是一个实施错误,这是标准失败的结果,不应该依赖于安全性。如果您遵守标准,您必须处理并理解"标题。按标准,您明确禁止忽略攻击者提供的标题。4

链接网站有更多关于JWT不安全的信息。

1 个答案:

答案 0 :(得分:0)

现在我正在实施类似的任务,只在前端Vue.js上。在后端我使用Symphony 4 + API Platform。目前,我通过JWT Authentication实现对API的安全访问,建议使用此方法。

您主题的链接:

如果您想快速设置,请使用FOSUserBundle Integration,但API平台不会推荐他的方法。

或者在Symfony4上使用此方法: -