トークン認証と Cookie を使用した認証の違いは何ですか?
Ember Auth Rails Demoを実装しようとしていますが、 Ember Auth FAQの「なぜトークン認証なのか?」という質問に記載されているように、トークン認証を使用する理由がわかりません。
トークン認証と Cookie を使用した認証の違いは何ですか?
Ember Auth Rails Demoを実装しようとしていますが、 Ember Auth FAQの「なぜトークン認証なのか?」という質問に記載されているように、トークン認証を使用する理由がわかりません。
HTTP はステートレスです。承認するには、サーバーに送信するすべてのリクエストに「署名」する必要があります。
トークン認証
サーバーへのリクエストは「トークン」によって署名されます。通常、これは特定の http ヘッダーを設定することを意味しますが、http リクエストの任意の部分 (POST 本文など) で送信できます。
長所:
<img src="http://bank.com?withdraw=1000&to=myself" />
。cookie 認証を使用して bank.com にログインしている場合、bank.com には XSRF の手段がありません。ブラウザがその URL に対して承認された GET リクエストをトリガーするという事実だけで、あなたのアカウントからお金を引き出します.) Cookie ベースの認証で実行できる偽造防止対策があることに注意してください-ただし、それらを実装する必要があります.クッキー認証
全体として、トークンを使用すると柔軟性が向上すると思います (単一のドメインに縛られないため)。欠点は、かなりのコーディングを自分で行う必要があることです。
典型的な Web アプリは、その要求/応答の性質から、ほとんどがステートレスです。HTTP プロトコルは、ステートレスプロトコルの最良の例です。ただし、ほとんどの Web アプリはstateを必要とするため、サーバーとクライアントの間で状態を保持するために、サーバーがすべての応答で Cookie をクライアントに返すことができるように、Cookie が使用されます。これは、クライアントからの次のリクエストにこの Cookie が含まれるため、サーバーによって認識されることを意味します。このようにして、サーバーはステートレスクライアントとのセッションを維持でき、アプリの状態に関するほとんどすべてを認識しますが、サーバーに保存されます。このシナリオでは、クライアントが保持する瞬間はありませんこれはEmber.jsの動作とは異なります。
Ember.js では事情が異なります。Ember.js は、サーバーに状態データを要求する要求を行うことなく、その状態を常に把握しているため、クライアントで実際に状態を保持するため、プログラマーの仕事が容易になります。
ただし、クライアントで状態を保持すると、ステートレスな状況では存在しない同時実行の問題が発生する場合もあります。ただし、Ember.js はこれらの問題にも対処します。具体的には、ember-data はこれを念頭に置いて構築されています。結論として、Ember.js はステートフルクライアント用に設計されたフレームワークです。
Ember.js は、セッション、状態、および対応する Cookie がサーバーによってほぼ完全に処理される典型的なステートレスWeb アプリのようには機能しません。Ember.js はその状態を完全に Javascript に保持し (他のフレームワークのように DOM ではなく、クライアントのメモリに)、サーバーがセッションを管理する必要はありません。これにより、アプリがオフライン モードの場合など、多くの状況で Ember.js の汎用性が高まります。
明らかに、セキュリティ上の理由から、認証のためにリクエストが行われるたびに、ある種のトークンまたは一意のキーをサーバーに送信する必要があります。このようにして、サーバーは送信トークン (サーバーによって最初に発行されたもの) を検索し、クライアントに応答を返す前に有効かどうかを確認できます。
私の意見では、 Ember Auth FAQに記載されているように Cookie の代わりに認証トークンを使用する主な理由は、主に Ember.js フレームワークの性質によるものであり、ステートフルなWeb アプリ パラダイムにより適合するためでもあります。したがって、Cookie メカニズムは、Ember.js アプリを構築する際の最善の方法ではありません。
私の答えがあなたの質問にもっと意味を与えることを願っています。
ここには混乱があると思います。Cookie ベースの認証と、現在HTML5 Web Storageで可能になっていることとの大きな違いは、ブラウザーは、Cookie データを設定したドメインからリソースを要求するたびに、Cookie データを送信するように構築されていることです。Cookie をオフにしない限り、これを防ぐことはできません。ページ内のコードがデータを送信しない限り、ブラウザーは Web Storage からデータを送信しません。また、ページは自分が保存したデータにのみアクセスでき、他のページに保存されたデータにはアクセスできません。
そのため、Cookie データが Google や Facebook によって使用される可能性があることを心配しているユーザーは、Cookie をオフにする可能性があります。ただし、Web Storage を無効にする理由はほとんどありません (広告主が Web Storage の使用方法を理解するまでは)。
これが Cookie ベースとトークン ベースの違いであり、後者は Web Storage を使用します。
トークンベースの認証はステートレスであり、サーバーはユーザー情報をセッションに保存する必要はありません。これにより、ユーザーがログインした場所を気にせずにアプリケーションをスケーリングできます。Cookie ベースには Web サーバー フレームワークのアフィニティがありますが、トークン ベースでは問題になりません。したがって、別の uid/pwd 認証を回避するために、ログインしているドメイン以外のドメインからセキュアなリソースをフェッチするために同じトークンを使用できます。
ここの非常に良い記事:
要するに:
JWT vs Cookie Auth
| | Cookie | JWT |
| Stateless | No | Yes |
| Cross domain usage | No | Yes |
| Mobile ready | No | Yes |
| Performance | Low | High (no need in request to DB) |
| Add to request | Automatically | Manually (if not in cookie) |