7

上下文:Ember-Data + AMS => JSON或HTTP標頭的Ember.js驗證令牌?

我有一個Ember.js 1.1.0-beta.1應用程序與Rails-API服務器(Rails 4)交換JSON數據。 JSON數據交換使用Ember-Data 1.0.0-beta.2和Active Model Serializer 0.8.1(AMS)完成。我使用Ember-Data和AMS的默認推薦配置,並且符合JSON-API規範。

在任何給定的RESTful呼叫上,客戶端將當前身份驗證令牌傳遞給服務器。身份驗證令牌已驗證並退役,並且會生成一個新的身份驗證令牌並將其發送回客戶端。因此,每個RESTful調用都會在請求中接受認證令牌,並在客戶端可緩存並用於下一個RESTful調用的響應中提供新的認證令牌。

問題:

我應該把認證令牌在每個請求和響應?

它是否應該是請求和響應中每個對象的JSON的一部分?如果是這樣,放置在現有對象的JSON結構中的令牌在哪裏(與認證無關)?

還是應該將它們放在每個請求和響應對象的HTTP標頭中?

什麼是「Ember方式」,最終可能會在新的Ember Guides Cookbook中找到?

更多的上下文:

我已經熟悉了以下幾個環節:

...我正在尋找超出這些範圍的答案,並且特定於Ember-Data + AMS。

隨着需要傳遞一個新的令牌返回給客戶端通過灰燼,數據響應除外,假設我的客戶端代碼,否則類似於在GitHub上@machty Embercast例如:https://github.com/embercasts/authentication-part-2/blob/master/public/js/app.js

謝謝非常!

回答

2

我已經構建了類似的東西,雖然我沒有重置令牌,除非用戶註銷。

我不會把它放在請求主體本身 - 你只是要污染你的模型。可能沒有Ember方式,因爲這更像是一個運輸問題。我使用自定義HTTP標頭和/或cookie傳遞標記。 Cookie需要授權文件下載,這不能通過ajax完成,儘管cookie也適用於ajax調用。在你的情況下,我會使用一個cookie,並讓服務器每次都將它設置爲新值。但是,您在每個JSON請求上重置標記的方案不適用於同時發生的請求。這真的有必要嗎?如果你使用TLS,你可能不需要太擔心。您也可以超時該令牌,以便如果10分鐘內沒有請求,則會生成新的令牌。

3

我有一個類似的堆棧 - 燼,燼數據和rails-api與AMS。現在,我只是通過修改RESTAdapterajax方法,將標識(我存儲在localStorage中)傳遞給標題(儘管您可以將其傳遞到查詢字符串中)。

我最初的想法是避免重置每個請求的令牌。如果您特別擔心被嗅探的令牌,則可能會更輕鬆地在服務器上定期重置該令牌(例如,10分鐘)。然後,如果來自客戶端的任何請求由於舊的令牌而失敗,只需獲取新的令牌(通過傳遞您的服務器在登錄時提供的「重置令牌」)並重播初始請求。

至於放置令牌的位置,並沒有真正的「Ember Way」 - 我更喜歡將它傳遞到頭中,因爲將它傳遞給查詢字符串可能會混淆緩存,並且更可能會記錄在某處一路上。我肯定會避免將它傳遞給請求主體 - 這會違背燼數據期望的,我會想象的。