POSTは、GET 類似点と相違点を区別します
淘宝網はトークンプロセスアルゴリズムを理解して 偽造要求防ぐために 偽造を比較的困難です
の簡単な歴史
ログイン操作:商品の彼らのショッピングカートに入れて、 私は皆のための領域を分離しなければならないことを意味し、これはHTTPリクエストはステートレスであるため、小さな挑戦ではないので、方法を考え出すことはみんなを与えることですセッション識別子(セッションID)を送信し、それは一人一人が、受信のために異なるランダムな文字列を、私はそのようHTTPリクエストは、一緒に取るためにこの文字列は、一緒に来たとき、あなたは私に開始するたびに意味します誰が誰であるかを区別することができるようになります
そうねえ、誰もがちょうど保つために必要それは非常にこんにちは肌ですが、サーバーは、革ではないセッションID、セッションID、あなたは誰を保存するサーバーを!サーバーなどへのアクセスの場合、千数百人、数千人の何百もしてきました。
これは巨大なサーバーのオーバーヘッドであると言われている 、 深刻な、サーバのスケーラビリティを制限し 、例えば、私は2台のマシンは、クラスタを形成する使用 小さなシステムにログイン機を介してFは、と仮定して、マシンAにセッションIDを保存します行う方法Fは、小さな要求は、マシンBに転送されていますか?セッションID、マシンB小さなFああではないことがあります。
時には少しトリックを使用しています:セッションスティッキーは、Fは、マシンAに付着された小さな要求をすることですが、これは効果的ではなく、マシンハングあれば、行くために、マシンBに行かなければなりませんでした。
それはしなければならなかったセッションのコピーは、セッションIDが急速に枯渇2台のマシン間で動き回ります。
その後、という男のトリックのMemcachedのサポートを:一箇所に集中的に保存されたセッションIDは、すべてのマシンがこの場所のデータにアクセスするために使用され、この方法は、彼らはコピーしませんが、それは場合、単一障害点の可能性を増大させますそのセッションは、マシンがハングアップのために、誰もが何度も何度も、それが推定されMasiの人がログインしなければならなかった責任があります。
だから、何人かの人々は、考えている 私は、この厄介な保存したい理由セッションそれを、単に各クライアントが素敵な維持するために聞かせて?
しかし、あなたは保存しない場合は確かに私に送られ、クライアントのセッションIDを確認する方法、セッションIDは、私の世代は何ですか?あなたが確認していない場合、我々は、彼らが正当なユーザーであることを知っていないログオンしていない、それらの人は、彼らがやりたい、悪質なセッションIDを偽造することができます。
ああ、はい、重要な点は確認することです !================================================== =================
================================================== =================
例えば、 小さな Fがシステムにログインした、私は彼の提案ユーザID小F、Iは、HTTP要求を介して再び小さなFを訪問次回含まトークン(トークン)を、送信された、ときに、このトークンHTTPヘッダーを介しとそれを終わっていません。
しかし、これとセッションIDは、本質的な違いは、ああ、誰もが偽造することはできないので、私は他の人が偽のことができないように、について何かをしなければなりません。
その後、データは署名、作るために 例えば、私が使用し、プラスは、私が鍵を知っている唯一のアルゴリズムHMAC-SHA256を他の人が鍵を知らないので、データは、署名、署名と印として一緒にデータを作ります、トークンは、偽造することはできません。
これは、トークンは、私が署名後、私は同じHMAC-SHA256アルゴリズムと同じキーを使用する場合、データの再計算は私F以上にする場合、この小さなトークンを保存しない、と署名がトークン比較を行います申し訳ありませんが、認定:もしそうなら、私は小さなFがオーバーログインしている、と同一でない場合は、データ部分は確かに改ざんされて、ユーザID、小さなFに直接撮影することができますことを知って、私は、送信者を教えてあげましょう。
もちろん、 人の場合は、トークンが他の誰かに盗まれ、その後私は、私は泥棒が正当な利用者であると思うだろう見当がつかない、これは人のセッションIDは、他の誰かが同じで盗まれた、実際にあります。
その結果、 私は保存されません、私はちょうどトークン生成セッションIDを、そのトークンを検証し、私は私のセッションストレージスペースを得るために、私のCPU時間を使用!
リフティングこの負担のセッションIDは、危険のうち何も、私のマシンのクラスタが簡単にラインで直接水平方向のスケーリング、ユーザトラフィックが増加し、加えて、マシンを行うことはできないということができます。このステートレス感が素晴らしいです!
クッキー
クッキーとは、データを永続的に保存することができ、ブラウザを指し、非常に特殊なものであるだけでブラウザの実装のデータストレージ機能です。
ブラウザに送信され、サーバによって生成されたクッキーは、KVの形にディレクトリ内のテキストファイルに保存されたブラウザのクッキーは、サーバーにあなたが同じサイトを要求する次回のクッキーを送信します。クッキーがクライアント上に存在するので、ブラウザはクッキーが悪意をもって使用されることはありません確実にするためにいくつかの制限が追加されますが、あまりにも多くのディスクスペースを占有しないので、ドメインあたりのCookieの数が限られています。
セッション
文字通り、セッションはセッションです。これはあなたに似ており、どのようにあなたが現在とジョー・スミスに話を知っている、いないジョン・ドウがそれで、人に話を?彼はジョー・スミスであることを他のいくつかの特性(外観、など)が存在する必要があります。
セッションでは、同様の理由、あなたは彼のyesにリクエストをした人を知りたい現在のサーバーです。この区別を行うために、各クライアントのために別のサーバーに行くこと「アイデンティティ」が割り当てられ、その後、サーバーに送信されるたびに、クライアントが時間を要求し、「アイデンティティ」に置かれ、サーバはリクエストが来ることを知っています誰が持っていました。この「アイデンティティ」を保存する方法クライアント用としてブラウザクライアントのために、我々は、デフォルトのクッキーのやり方を使用している、さまざまな方法を持つことができます。
サーバが使用して、ユーザーの情報へのセッションが一時的に破壊されるサイトを離れた後、サーバー、ユーザーセッションに保存されます。このユーザー情報が格納されているが、比較的クッキーはより安全ですが、セッションは欠陥があります:Webサーバーが負荷分散、セッションが失われます別のサーバーに、次の操作要求を行うにした場合。
トークン
ではどこでもWebベースの検証トークンのアイデンティティの分野。最も使用のWeb APIのインターネット企業では、トークンは、マルチユーザ認証を処理するための最良の方法です。
次のプロパティを使用すると、ベースのプログラムで使用できるようになるトークン認証
1.ステートレス、スケーラブル
モバイルデバイス用2.サポート
3.クロスプログラムの呼び出し
4.セキュリティ
検証のトークン原則
ベースの認証トークンはステートレスである、我々は、ユーザ情報サーバまたはセッションには存在しません。
この概念は、サーバー上に保存されている情報の問題の多くを解決します
NoSessionあなたは、必要に応じてユーザーがログインしているかどうかを心配することなく、増加または減少させるために機械をプログラムできることを意味します。
基づき、次のようにトークン認証プロセスは次のとおりです。
1.クライアントは、ユーザー名とパスワードを介して要求を送信します。
2.プログラムを確認してください。
3.プログラムは、クライアントに署名したトークンを返します。
4.ストレージクライアントトークン、各送信要求のたびに。
認証トークンとサーバがデータを返します。
各要求はトークンが必要です。HTTPリクエストステートレスを確実にするために送信されるHTTPヘッダーのトークン。また、サーバーのプロパティを設定することで、アクセスが-Controlキーを許可 - 起源:*、サーバはすべてのドメインからの要求を受信できるようにします。主な必要性は処置の頭部に、HTTP認証、SSL証明書とクッキーエンドのクライアント証明書を使用して好きではない場合は*(指定)に示されています。
1.利用者は、トークンがクライアントに返され、成功した後に確認し、チェックをログに記録します。
2.クライアントクライアントに格納されたデータを受信した後、
3.クライアントAPIは、各訪問は、サーバーにトークンを運んでいます。
4.サーバーは、フィルタ校正フィルタを使用しています。要求されたデータは、チェックが成功した返され、エラーコードチェックに失敗を返します
私たちは情報を認証し、プログラムで取得するとトークンの後、我々は、このトークンを使用して多くのことを行うことができるようになります。
私たちも、権利に基づいて作成することができます(唯一の私たちができるように、特定のトークンには、もちろん)、サードパーティのアプリケーショントークンに、これらのサードパーティ製プログラムが我々のデータを取得することができます
================================================== =================
トークンの利点
スケーラブル、ステートレス
クライアントの保存されたトークンはステートレスであり、拡張することができます。この格納状態と非セッション情報に基づいて、ロードバランサは、別のサーバ上で送信されたサービスからのユーザ情報をロードすることができます。
================================================== =================
セキュリティ
リクエストの送信トークンは、送信クッキーCSRF(クロスサイトリクエストフォージェリ)を防止することはできなくなりました。クライアントがトークン格納するためにCookieを使用している場合でも、Cookieストアは、認証のための唯一のメカニズムとではありません。私たちはセッション操作のあまりを持っているような情報は、セッションに格納されていません。
================================================== =================
スケーラビリティ()
トークンは、他のプログラムと権限を共有するためのプログラムを作成することができます。例えば、カジュアルな社会のアカウントと独自の大規模な(FackbookやTwitter)のリンクをすることができます。あなたがサービスを経由してのTwitter(私たちがします。このプロセスのバッファ)でログインすると、我々はこれらのバッファを使用することができます(私たちはバッファが私たちのTwitterストリームに投稿することができます)Twitterのデータストリームに添付。
================================================== =================
マルチプラットフォームクロスドメイン
私たちは、について話を最初に進めアプリケーションやサービスを展開CORS(クロスドメイン・リソースの共有)、すべての種類のデバイスやアプリケーションのすべての種類の介入。
================================================== =================
標準に基づいて、
作成したトークンを、あなたはいくつかのオプションを設定することができます。私たちは、より完全今後の記事で説明するが、標準的な使用のトークンは、JSONのWebに反映されます。