【问题标题】:Ember.js Authentication Token for Ember-Data + AMS => JSON or HTTP Header?Ember-Data + AMS => JSON 或 HTTP 标头的 Ember.js 身份验证令牌?
【发布时间】:2013-09-28 20:25:38
【问题描述】:

上下文:

我有一个 Ember.js 1.1.0-beta.1 应用程序,它与 Rails-API 服务器(Rails 4)交换 JSON 数据。 JSON 数据交换是通过 Ember-Data 1.0.0-beta.2 和 Active Model Serializers 0.8.1 (AMS) 完成的。我正在为 Ember-Data 和 AMS 使用默认推荐配置,并且符合 JSON-API 规范。

在任何给定的 RESTful 调用中,客户端都会将当前身份验证令牌传递给服务器。身份验证令牌经过验证并停用,并生成新的身份验证令牌并将其发送回客户端。因此,每个 RESTful 调用都接受请求中的身份验证令牌,并在响应中提供新的身份验证令牌,客户端可以缓存并用于下一次 RESTful 调用。

问题:

我在每个请求和响应中将身份验证令牌放在哪里?

它应该是请求和响应中每个对象的 JSON 的一部分吗?如果是的话,令牌放在现有对象的 JSON 结构中的什么位置(与身份验证无关)?

还是应该将它们放在每个请求和响应对象的 HTTP 标头中?

人们最终可能希望在新的 Ember Guides Cookbook 中找到什么是“The Ember Way”?

更多内容:

我已经熟悉以下链接:

...并且正在寻找超出这些范围的答案,并且特定于 Ember-Data + AMS。

除了需要通过 Ember-Data 在响应中将新令牌传回客户端外,假设我的客户端代码在其他方面类似于 GitHub 上的 @machty Embercast 示例:https://github.com/embercasts/authentication-part-2/blob/master/public/js/app.js

非常感谢!

【问题讨论】:

    标签: authentication ember.js ember-data active-model-serializers rails-api


    【解决方案1】:

    我有一个类似的堆栈——带有 AMS 的 ember、ember-data 和 rails-api。现在,我只是通过修改RESTAdapterajax 方法在标头中传递身份验证令牌(我存储在localStorage 中)(尽管您可以在查询字符串中传递它)。

    我最初的想法是避免在每次请求时重置令牌。如果您特别担心被嗅探的令牌,那么定期(例如,10 分钟)重置服务器上的令牌可能会更容易。然后,如果来自客户端的任何请求由于旧令牌而失败,只需获取新令牌(通过传递您的服务器在登录时提供的“重置令牌”)并重播初始请求。

    至于将令牌放在哪里,实际上并没有“Ember Way” - 我更喜欢在标题中传递它,因为在查询字符串中传递它可能会混淆缓存,而且更有可能被记录在某个地方方式。我肯定会避免在请求正文中传递它 - 我想这会违背 ember-data 的预期。

    【讨论】:

      【解决方案2】:

      我已经构建了类似的东西,但除非用户退出,否则我不会重置令牌。

      我不会把它放在请求正文中——你只会污染你的模型。可能没有 Ember 方式,因为这更像是一个传输问题。我使用自定义 HTTP 标头和/或 cookie 传递令牌。需要 cookie 来授权文件下载,这不能通过 ajax 完成,尽管 cookie 也适用于 ajax 调用。在您的情况下,我会使用 cookie 并让服务器每次都将其设置为新值。但是,您在每个 JSON 请求上重置令牌的方案不适用于同时请求。这真的有必要吗?如果您使用 TLS,您可能不需要太担心。您还可以使令牌超时,以便在 10 分钟内没有请求时生成新令牌。

      【讨论】:

        猜你喜欢
        • 2012-12-12
        • 2015-08-19
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-29
        • 1970-01-01
        相关资源
        最近更新 更多