我一直在寻找在调用 REST 服务时处理身份验证和 CSRF 保护的方法(例如,Angular 与 Rails 公开的 REST api 对话)。我一直在阅读诸如在 Rails 中通过 REST apis 保护 CSRF 的讨论、相关的 so post和建议的解决方案,以及查看有关防止 CSRF 的 Angular 文档以及各种 REST apis 如何进行身份验证。毕竟,这是我看到的一般情况:
您希望使用现有的基于 cookie 的身份验证/会话方案在现有站点的上下文中对 REST 端点进行 AJAX 调用。在这种情况下,让您的 AJAX 调用也使用基于 cookie 的身份验证是有意义的,并在 AJAX 请求中包含“X-CSRF-Token”标头以防止各种棘手的基于 Flash/Java/重定向的 CSRF 攻击。
您想为您的应用程序公开一个完整的开发人员 API,允许其他人创建与您的后端接口的应用程序/插件/等。在这种情况下,最好为 API 客户设置 API ID 和密钥,并使用 OAuth 或其他方式让 3rd 方应用程序访问用户数据。这具有重要的好处,即用户能够管理哪些 3rd 方应用程序可以访问他们的数据等。
您希望自己的富客户端或移动应用程序能够访问您自己的后端。没有现有的基于 cookie 的会话管理,但您不一定需要 (2) 的灵活性。在这种情况下,使用 Devise 的“token_authenticable”之类的东西似乎很有意义,在 js 的情况下将令牌简单地存储在 cookie 或本地存储中,或者在移动应用程序的本地应用程序数据中。这就像 Parse 是如何做到的(但我会添加使那些存储的令牌过期的能力......)
这一切基本正确吗?我错过了什么重要的东西吗?对我来说,这一切都只是有点令人困惑,因为“REST API”可以有不同的用例......