【发布时间】:2018-02-06 02:40:26
【问题描述】:
我正在尝试使用 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 不安全原因的更多信息。
【问题讨论】:
-
我很想知道您为什么认为 JWT 不适合,因为很多人将 JWT 用于您的用例。
-
为什么 JWT 不适合您的用例?但无论如何:只是简单的旧会话也可以。只需使用仅 HTTP 安全标记的 cookie,无论您做什么。如果只是为了做一个 API,就只是针对 API 的 Lumen(Laravel 的剥离版)lumen.laravel.com
-
@BlueM 嗨,我已经编辑了我的帖子,解释了一些原因!
-
@Jørgen 我会看看那个,我肯定只需要一个 API!我还编辑了我的帖子,说明了 JWT 不适合身份验证的原因。
标签: rest session authentication angular5 symfony4