我有一个Ember.js 1.1.0-beta.1应用程序,它与Rails-API服务器(Rails 4)交换JSON数据.使用Ember-Data 1.0.0-beta.2和Active Model Serializers 0.8.1(AMS)完成JSON数据交换.我正在使用Ember-Data和AMS的默认推荐配置,并且符合JSON-API规范.
在任何给定的RESTful调用中,客户端将当前的身份验证令牌传递给服务器.验证和退出身份验证令牌,并生成新的身份验证令牌并将其发送回客户端.因此,每个RESTful调用都接受请求中的身份验证令牌,并在响应中提供新的身份验证令牌,客户端可以缓存并用于下一个RESTful调用.
题:
我在哪里将身份验证令牌放在每个请求和响应中?
它应该是请求和响应中每个对象的JSON的一部分吗?如果是这样,令牌放在现有对象的JSON结构中哪里(与身份验证无关)?
或者它们是否应该放在每个请求和响应对象的HTTP标头中?
什么是“Ember Way”,人们可能最终期望在新的Ember Guides Cookbook中找到它?
更多背景:
我已经熟悉以下链接:
> @machty 2 Embercasts:http://www.embercasts.com/episodes/client-side-authentication-part-2
> @wycats推文:https://twitter.com/wycats/status/376495062709854209
> @cavneb 3篇博文:http://coderberry.me/blog/2013/07/08/authentication-with-emberjs-part-1
> @simplabs博客文章:http://log.simplabs.com/post/53016599611/authentication-in-ember-js
…我正在寻找超越这些的答案,并且特定于Ember-Data AMS.
除了需要通过Ember-Data在响应中将新令牌传递回客户端之外,假设我的客户端代码与GitHub上的@machty Embercast示例类似:https://github.com/embercasts/authentication-part-2/blob/master/public/js/app.js
非常感谢你!
解决方法
我最初的想法是避免在每个请求上重置令牌.如果您特别担心令牌被嗅探,则可能更容易在服务器上定期重置令牌(例如,10分钟).然后,如果来自客户端的任何请求由于旧令牌而失败,则只需获取新令牌(通过传递服务器在登录时提供的“令牌”)并重播初始请求.
至于放置令牌的位置,实际上并没有“Ember Way” – 我更喜欢在标题中传递它,因为在查询字符串中传递它会使缓存变得混乱,并且更有可能在路上的某处记录.我肯定会避免在请求体中传递它 – 这会违背ember-data所期望的,我想.