【问题标题】:Backbone & REST API : Session HandlingBackbone & REST API:会话处理
【发布时间】:2014-09-12 09:24:12
【问题描述】:

我正在计划一个 SaaS 应用程序,并且一直在试图弄清楚我想如何处理我的会话管理。这是场景:

服务器 1:REST API,带有 rails-api gem 的 Rails 4

服务器 2:前端、Rails 4、BackboneJS/MarionetteJS

  • 这些服务器最终将成为类似服务器集群的一部分。
  • 这些应用程序是独立的,因为还有一个使用 REST API 的移动应用程序,我们计划通过 API 将第 3 方应用程序绑定到我们的数据库中。

我把它归结为两种情况:

1) 仅在前端使用 access_tokens 进行身份验证:

  • 用户通过 https 登录并通过电子邮件和密码发送
  • 它们通过 api 进行身份验证并返回 access_token
  • 未来在前端发出的所有请求都使用此访问令牌

2) 前端的用户数据库会话,然后是 api 调用的 access_tokens

  • 用户登录并通过前端服务器上的设计进行身份验证(将会话信息存储在数据库中)
  • 会为它们生成一个 access_token,并将其添加到 Backbone 应用初始化中以供将来的 api 请求使用

我喜欢#2,因为每次用户更改页面时,我都可以轻松查看他们是否仍然经过身份验证,如果没有,则将它们引导回登录页面。

但是#1 让事情变得简单,因为前端服务器处理的就是前端的东西。

是否有人建议一种方法优于另一种方法?为什么?

还有其他选择吗?

谢谢大家!

【问题讨论】:

    标签: api rest session backbone.js ruby-on-rails-4


    【解决方案1】:

    您正在通过使用access_token 重新发明轮子。 Devise 已经生成了一个 cookie 并在登录时将其发送回来。只需在客户端登录时解析此 cookie 即可:

    • 用户使用主干应用登录(发布请求发送到 API 服务器)
    • Devise 做事并验证用户身份,生成 session_id 并将其发送回 HTTP Set-cookie 标头。
    • backbone 应用解析 cookie 并缓存 session_id 值(将其视为您的 access_token)
    • 每个后续的 api 调用都会在 HTTP Cookies 标头中将 cookie 值作为 session_id=cookie-value-here 发送

    请注意,您的会话 cookie 名称是为您的应用自定义的,可以通过以下方式在初始化程序中进行配置:

    # /config/initializers/session_store.rb
    YourRailsApp:Application.config.session_store :cookie_store, :key => '_your_rails_app_session'
    

    【讨论】:

    • 感谢@diego.greyrobot 的回答。我看到的一个主要缺点是我必须处理两种类型的身份验证。这样做的原因是用户也将其用作传统的 REST API 并请求 oauth 访问令牌并将其用于他们的 api 调用
    • 那为什么不让 oauth 成为唯一的身份验证方法呢? access_token 方法不也是第二种身份验证形式吗?关键是不要重新发明会话令牌,因为它已经由设计通过会话 cookie 提供。
    • 是的,你是对的。我认为存储会话(用于使用跟踪和虚荣统计)都很好而且很花哨,但我只会将其保留为直接的 oauth 过程。发送电子邮件/通行证,开始会话,生成令牌,发回令牌,通过令牌验证每个请求。注销时,会话过期,令牌过期。
    • 感谢迭戈的反馈!
    猜你喜欢
    • 1970-01-01
    • 2011-12-23
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2018-04-30
    • 2011-10-07
    • 2017-05-27
    相关资源
    最近更新 更多