【问题标题】:Secure authentication for REST or GraphQL Single-page applicationREST 或 GraphQL 单页应用程序的安全身份验证
【发布时间】:2018-06-12 04:18:55
【问题描述】:

我正在开发一个带有 GraphQL 后端的新 SPA。我不确定的是如何正确解决 JS 客户端和 GraphQL 后端之间的身份验证。出于身份验证的目的,后端是 GraphQL 还是良好的旧 REST 并不重要。

我在 StackOverflow 上阅读了一些文章和其他问题。以下是我收集的可能解决方案及其问题:

Cookies

当然,cookie 容易受到 CSRF 攻击。所以也许 cookie 可以与一些额外的 CSRF 保护一起使用。不过,在这种情况下,我找不到如何实现它。如何在 SPA 中创建和使用 CSRF 令牌?

JWT(JSON Web 令牌)

显然JWT有很多问题,不应该使用:

其他一些标记

这是大多数 REST API 所做的 - 客户端通常在 X-Auth-Token 标头中发送身份验证令牌。这当然没有 cookie 的 CSRF 漏洞,但并不完全适合 SPA(REST API 通常不是为 SPA 前端应用程序设计的)。它与 JWT 存在一些问题——主要是令牌需要存储在客户端的 LocalStorage 中。 (在上面链接的关于 JWT 的 article 中进行了解释。)


问题是我总是发现一些批评,为什么解决方案 X 是错误的,没有信息可以使用什么来代替,或者建议使用解决方案 Y,而不考虑该解决方案的问题。

许多网站都说 API 应该是无状态的 - 不保存有关当前经过身份验证的会话的任何数据,因为它可以防止水平扩展。我并不真正关心这个问题 - 99% 的应用程序都不需要水平扩展。

那么 SPA 身份验证的最佳做法是什么?您在 SPA 中使用什么解决方案?

我不一定会忽略上面列出的所有解决方案,但如果应该使用其中任何一个,我需要以某种方式解决他们的问题,或者有充分的理由忽略这些问题。

【问题讨论】:

    标签: authentication single-page-application


    【解决方案1】:

    在身份验证方面,有很多非常聪明但愤怒的人几乎反对任何概念,你是对的,他们经常忘记应该推荐替代方案的部分。

    OAuth 2 已经被很多人诟病了,但它确实非常棒,只要你使用 SSL!

    我的一本书有一整章解释了所有身份验证类型的优缺点:Build APIs You Won't Hate

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2014-01-26
      • 2015-10-01
      • 1970-01-01
      • 2012-03-12
      相关资源
      最近更新 更多