7

CONTEXT:Ember-Data + AMSのEmber.js認証トークン=> JSONまたはHTTPヘッダー?

JSONデータをRails-APIサーバー(Rails 4)と交換するEmber.js 1.1.0-beta.1アプリケーションがあります。 JSONデータの交換は、Ember-Data 1.0.0-beta.2とActive Modelシリアライザ0.8.1(AMS)を使用して行います。私はEmber-DataとAMSの両方でデフォルトの推奨設定を使用しており、JSON-API仕様に準拠しています。

任意の特定のRESTful呼び出しでは、クライアントは現在の認証トークンをサーバーに渡します。認証トークンが検証され、廃棄され、新しい認証トークンが生成され、クライアントに返送されます。したがって、すべてのRESTful呼び出しは、要求内の認証トークンを受け入れ、クライアントがキャッシュして次のRESTful呼び出しに使用できる応答内に新しい認証トークンを提供します。

QUESTION:

私はそれぞれの要求と応答で認証トークンを置くのですか?

リクエストとレスポンスで各オブジェクトのJSONの一部でなければなりませんか?その場合、トークンは既存のオブジェクトのJSON構造体に置かれます(認証とは関係ありません)。

それぞれの要求と応答オブジェクトのHTTPヘッダーに配置する必要がありますか?

最終的に新しいEmber Guides Cookbookで見つかると思われる「The Ember Way」とは何ですか?

MORE CONTEXT:

私はすでに、次のリンクを熟知してる:

...これらを超えて、Ember-Data + AMSに固有の回答を探しています。 https://github.com/embercasts/authentication-part-2/blob/master/public/js/app.js

ありがとう:エンバー・データを介して応答してクライアントに新しいトークンを渡す必要の例外を除いて

は、私のクライアントコードはGitHubの上@machty Embercast例と他の点では同様であると仮定しますとても!

答えて

2

私はユーザーがサインアウトしない限り、私はトークンをリセットしませんが、同様のものを構築しました。

私はそれをリクエスト本体に入れません。あなたのモデルを汚染するだけです。おそらくEmberの方法はありません。なぜなら、これは輸送の問題であるからです。カスタムHTTPヘッダーやCookieを使用してトークンを渡します。クッキーはajaxコールでも機能しますが、ajaxではできないファイルのダウンロードを許可するにはクッキーが必要です。あなたのケースでは、私はクッキーを使用し、毎回新しい値にサーバーを設定します。ただし、各JSONリクエストでトークンをリセットするスキームは、同時リクエストでは機能しません。これは本当に必要ですか? TLSを使用する場合は、おそらくあまり心配する必要はありません。また、トークンをタイムアウトさせることで、10分のリクエストがなければ新しいトークンが生成されるようにすることもできます。

3

私は、AMSのember、ember-data、rails-apiと同様のスタックを持っています。今は、RESTAdapterajaxメソッドを変更して、認証トークン(localStorageに格納されている)をヘッダに渡しています(クエリ文字列に渡すことはできますが)。

私の最初の考えは、すべてのリクエストでトークンをリセットしないようにすることです。トークンが盗聴されることが特に懸念される場合は、定期的な間隔(たとえば10分)でサーバー上のトークンをリセットするほうが簡単かもしれません。クライアントからの要求が古いトークンによって失敗した場合は、新しいトークンをフェッチして(サーバーがログイン時に指定した「リセットトークン」を渡して)、最初の要求を再生します。

トークンをどこに置くかについては、実際には "Ember Way"はありません。私はヘッダーに渡すことをお勧めします。なぜなら、クエリ文字列を渡すことがキャッシュを混乱させる可能性があり、途中で私は間違いなくそれを要求本体に渡すことを避けたいと思います。それは、ember-dataが期待するものとは逆になるでしょう、私は想像しています。

関連する問題