トークン認証とCookieを使用した認証の違いは何ですか?トークン認証とCookie
私はEmber Auth Rails Demoを実装しようとしていますが、「なぜトークン認証なのか」という質問のEmber Auth FAQに記載されているように、トークン認証を使用する理由はわかりません。それは要求/応答ネイチャーズのため
トークン認証とCookieを使用した認証の違いは何ですか?トークン認証とCookie
私はEmber Auth Rails Demoを実装しようとしていますが、「なぜトークン認証なのか」という質問のEmber Auth FAQに記載されているように、トークン認証を使用する理由はわかりません。それは要求/応答ネイチャーズのため
典型的なWEPアプリは、主にステートレスです。 HTTPプロトコルは、ステートレスプロトコルの最良の例です。しかし、ほとんどのWebアプリケーションはの状態を必要とするので、サーバーとクライアントの間での状態を保持するために、サーバーがすべての応答をクライアントに返信できるようにクッキーが使用されます。つまり、クライアントからの次の要求にはこのCookieが含まれ、サーバーによって認識されます。このようにしてサーバーはセッションをステートレスのクライアントに保ち、アプリケーションの状態に関するすべてを知っていますが、サーバーに保存します。このシナリオでは、クライアントがの状態を保持することはありません。これはEmber.jsの動作ではありません。
Ember.jsではさまざまなものがあります。それはあなたのために実際に状態を保持しているためEmber.jsは、それが状態データを求めてサーバーに要求を加えることなく状態だについてすべての瞬間で知って、クライアントでは、より簡単に、プログラマの仕事になります。
しかし、また単にステートレス状況には存在しない同時実行の問題を導入することができ、クライアントに状態を保持しています。 Ember.jsはこの問題も扱っています。具体的にはember-dataはこれを念頭に置いて作成されています。結論として、Ember.jsはステートフルクライアント用に設計されたフレームワークです。
Ember.jsはセッション、状態と対応するクッキーがサーバによってほぼ完全に処理される典型的なステートレスウェブアプリのように動作しません。 Ember.jsは、の状態を完全にjavascript(クライアントのメモリ内にあり、他のフレームワークのようにDOMではなく)に保持しているため、サーバーをセッション管理する必要はありません。これによりEmber.jsは多くの状況でより汎用性が高まります。あなたのアプリがオフラインモードのとき
それは トークンまたは 要求がようにするために作られて毎回サーバーに送信するためのユニークなキーは、サーバが送信トークンを検索することができますこの方法をを認証済みのいくつかの種類を必要とし、セキュリティ上の理由から明らかに(サーバーによって最初に発行されたもの)を検証し、クライアントに応答を返す前に有効かどうかを確認します。私の意見で
主な理由Ember.jsフレームワークの性質のものであり、またそれがステートフル Webアプリケーションのパラダイムと、よりフィットするのでEmber Auth FAQに述べたように、認証トークンの代わりに、クッキーを使用する主な理由。したがって、Ember.jsアプリケーションを構築する際のクッキーメカニズムは最良の方法ではありません。
私の答えがあなたの質問にもっと意味を与えることを望みます。
トークンがクッキーより優れている/違う理由はまだ分かりません。あなたは、有効なセッションを識別する何かをapiサーバに送信しています。単一ドメイン上ですべてを実行していると仮定します(そして、エバーとあなたのAPIが異なるサーバー上にあっても、これを達成するために必要なのはCDNの背後で実行されますが、とにかく実行する必要があります)余分なセットアップ作業とタイミング攻撃に対する余計な脆弱性? –
マイケル・ジョンストンとの合意。この回答はトークンベースの認証が何であるかを説明していますが、実際にはその質問に答えなかったものです。私が見ることができる最も関連性のある情報は最後のビットです_ "ember.jsフレームワークの性質のため、またステートフルなWebアプリケーションのパラダイムに合っているからです" _しかし、それはまったく答えではありません。私は同じ質問があります。 – Daniel
私はここのコメントに同意します...実際には、私は全体的に "魔法のようです"と感じています。 – Grapho
私はここにいくつかの混乱があると信じています。 Cookieベースの認証と現在HTML5 Web Storageで可能なこととの間の重要な違いは、Cookieデータを設定するドメインからのリソースを要求するたびにCookieデータを送信するようにブラウザが構築されていることです。クッキーをオフにすることなく、それを防ぐことはできません。ブラウザは、ページ内のコードがを送信しない限り、Web Storageからデータを送信しません。また、ページは保存したデータにのみアクセスでき、他のページに保存されているデータにはアクセスできません。
ユーザーは、CookieデータがGoogleまたはFacebookによって使用される方法を心配し、Cookieを無効にする可能性があります。しかし、Web Storageをオフにする理由は少ない(広告主がそれを使用する方法を理解するまで)。
これはCookieベースとトークンベースの違いです。後者はWeb Storageを使用します。
トークンが
トークンがクッキーのように有効期限が切れることはできますが、より多くの制御
ストレージが動作しませんローカル/セッションを持っている(ローカル/セッションストレージやクッキー)どこかに保存する必要がありますドメイン間で、マーカーのクッキーを使用し
プリフライトリクエストは各CORS要求
あなたは、何かをストリーミングすることはトークンがリクエストごとに送られますXSRF
よりXSSに対処する方が簡単です署名要求
を取得するためにトークンを使用し、そのサイズ
場合は、トークン
JSONウェブトークンはOAuthの
で使用することができトークンの暗号化銀のない弾丸再、あなたの承認のユースケースを考えるトークンベースの認証はステートレスで慎重
http://blog.auth0.com/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/
http://blog.auth0.com/2014/01/07/angularjs-authentication-with-cookies-vs-token/
あなたのポイントがクッキーまたはトークンであるかどうかは不明です。 – Pureferret
なぜ私はあなたがクッキーよりもトークンを「制御する」ことが理解できません。 – Aaron
@onsmith私が理解しているところでは、ここに一つ以上の箇条書きがあります。まず、リクエストごとにCookieが送信されます。送信トークンは、JavaScriptコードによってトリガーされます。それらは自動的に送信されません。また、[rfc section 4](https://tools.ietf.org/html/rfc7519#page-8)によると、JWTは当事者間でのセキュリティ要求の転送に使用されるコンテナとして設計されているようです。より詳細な制御を提供するとともに、サードパーティの認証トークンを生成して、あなたの代わりに使用できるようにするアクセス許可のセットを提供します。 – FullStackForger
、サーバは、セッション中にユーザー情報を保存する必要はありません。これにより、ユーザーがどこにログインしているか心配することなくアプリケーションを拡張できるようになります。クッキーベースのWebサーバーフレームワークの親和性は、トークンベースの問題ではありません。したがって、別のuid/pwd認証を避けるために、同じトークンを使用して、ログインしているドメイン以外のドメインから安全なリソースを取得することができます。
ここに非常に良い記事:
HTTPはステートレスでは、あなたを承認するためには、あなたがサーバーに送っているすべての単一の要求を「署名」しなければなりません。
サーバへの要求が「トークン」によって署名され
トークン認証 - しかし、彼らは、HTTPリクエスト(POST体、等の任意の部分に送信することができ、通常、それが特定のHTTPヘッダを設定する手段、 )
長所:
<img src="http://bank.com?withdraw=1000&to=myself" />
のような電子メールのリンクを送ってきます。また、cookie認証を使ってbank.comと銀行にログインしている場合) .comにはXSRFの保護手段がありません。あなたのブラウザがそのURLに対して許可されたGET要求をトリガーするということだけで、アカウントから資金を引き出すことになります。 Cookieベースの認証で行うことができる反偽造対策があることに注意してください。しかし、それらを実装する必要があります。クッキー認証
ある自分でコーディングする
この答えは、受け入れられたものよりも正式な答えにはるかに近い。 –
ありがとう@ ondrej-svejdar。これは最高の答えです!私は「かなりのコーディング」部分だけを主張するだろう。ほとんどすべての言語で利用できるライブラリが数多くあります。したがって、JWTの実装の仕組みを本当に知りたい場合を除いて、最初から始める必要はありません。 – FullStackForger
'すべての単一の要求に対して送信されます。 '要求ごとにトークンが送信されます –
トークンは、モバイルアプリに与えられ、後で使用するために変数に保存することができます。また、ブラウザでJavaScriptを使用してSPAリクエストで使用するために保存することもできます。 Cookieは一般的に(ブラウザによって)ブラウザで使用されます。 –
2016年に書かれた記事https://auth0.com/blog/cookies-vs-tokens-definitive-guide/を参照してください。 –