骨干& REST API:会话处理

时间:2014-07-21 18:46:03

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

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

服务器1:REST API,Rails 4 w / rails-api gem

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

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

我把它归结为两种情况:

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

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

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

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

我赞成#2只是因为每次用户更改页面时,我都可以很容易地看到它们是否仍然经过身份验证,如果没有,请将它们重新启动回登录页面。

但#1让前端服务器处理的事情变得简单:前端的东西。

是否有人建议使用另一种方法?为什么呢?

有没有其他选择?

全部谢谢!

1 个答案:

答案 0 :(得分:0)

您正在使用access_token重新发明轮子。设计已生成cookie并在登录时将其发回。只需在客户端登录时解析此cookie:

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

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

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