違いトークン、クッキーとのセッション

この記事ゴー http://blog.csdn.net/tobetheender/article/details/52485948

インタフェースのテストを行うことで、私たちは多くの場合、トークンリクエストパラメータの種類が発生したが、ほとんどのテスターはトークン、クッキーを区別して、セッションがまだ少し理解されています。

クッキーとは、データを永続的に保存することができ、ブラウザを指し、非常に特殊なものであるだけでブラウザの実装のデータストレージ機能です。

ブラウザに送信され、サーバによって生成されたクッキー、KVフォームにディレクトリ内のテキストファイルに保存されたブラウザのクッキーは、サーバーにあなたが同じサイトを要求する次回のクッキーを送信します。クッキーがクライアント上に存在するので、ブラウザはクッキーが悪意をもって使用されることはありません確実にするためにいくつかの制限が追加されますが、あまりにも多くのディスクスペースを占有しないので、ドメインあたりのCookieの数が限られています。

セッション

文字通り、セッションはセッションです。これは人にあなたと話に似て、どのようにあなたが現在とジョー・スミスに話を知っている、いないジョン・ドウはそれを何ですか?彼はジョー・スミスであることを他のいくつかの特性(外観、など)が存在する必要があります。

セッションでは、同様の理由、あなたは彼のyesにリクエストをした人を知りたい現在のサーバーです。この区別を行うために、各クライアントのために別のサーバーに行くこと「アイデンティティ」が割り当てられ、その後、サーバーにクライアントが時間を要求するたびに送信され、「アイデンティティ」に置かれ、サーバはリクエストが来ることを知っています誰が持っていました。この「アイデンティティ」を保存する方法クライアント用として、さまざまな方法を持つことができ、ブラウザクライアントのために、我々は、デフォルトのCookieの方法を使用しています。

サーバーは、サイトが破壊される去った後、一時的にサーバーに保存されているユーザーのセッション情報、ユーザー・セッションを使用しています。このユーザー情報が格納されているが、比較的クッキーはより安全ですが、セッションは欠陥があります:Webサーバーが負荷分散、セッションが失われます別のサーバーに、次の操作要求を行うにした場合。

トークン

トークンの導入:トークンは頻繁に頻繁にデータベースへのサーバーは、ユーザー名とパスワードを照会し、クライアントでサーバーにデータを要求し、ユーザー名とパスワードが正しいかではなく、この文脈では、適切なプロンプトを作るかを決定するために比較され、トークン彼らはされて入ってきました。

トークンの定義:トークンは、ログインする最初の時間は、サーバが唯一の後、クライアントにクライアントをこれを返します。トークントークンを生成し、要求元のクライアントへのトークンとして、文字列のサーバーに生成された文字列であります再度、ユーザー名とパスワードを持参する必要なしに、要求データに来て、これを持参するトークンが必要。最も単純なトークンからなる:UID(ユーザの一意のID)、時刻(現在時刻のタイムスタンプ)、符号(圧縮するためにいくつかの前者塩+ハッシュアルゴリズムによる署名トークン進文字の一定の長さに文字列、悪意の第三者が防止でき、スプライシングリクエストトークンサーバ)。

トークンを使用する目的:トークンの目的は、データベース、サーバはより堅牢頻繁にクエリを削減、サーバー上の圧力を緩和することです。

 

従来の認証

HTTPはステートレスなプロトコルであること、それはアプリケーションにアクセスしているか分からないんです。ここでは、クライアントは、ユーザー名やパスワード認証を使用して、クライアントとして利用者を置くが、その後検証しなければならないとき、クライアントが要求を再送信し、次回。

解決策は、問題がなければ、ユーザは、ログインを要求したとき、私たちは、サーバー側でユーザーがログインし、クライアントを置くために、レコードのID番号を送信しようとしている人に説明することができますこのレコードをレコードを生成していることですクライアントがクッキーを受信した後、サービスが次回ユーザーがID番号を格納するための要求を送信し、あなたはクッキーを取ることができますので、サーバーはクッキーでこれを情報を確認します、あなたはサービスにできるかどうかを確認しますここでは、対応するレコードが見つかった終了し、そうであれば、ユーザーが認証されたことを示す、ユーザーが要求されたデータがクライアントに返されます置きます。

セッションは、上記と言われ、私たちは、ユーザーが生成する必要がセッションを保存するためにサーバーに記録され、セッションは、メモリ、ディスク、またはデータベースに格納することができます。私たちは、期限切れのセッションをクリアするために定期的にサービスを終了する必要があるかもしれません。

トークンベースの身元確認

サーバーに記録されているトークンベースの認証方法、ログオンを使用して、ユーザーを保存する必要はありません。おそらくプロセスはこれです:

  • クライアントは、パスワードを要求して、ユーザのログイン名を使用しています
  • サーバーは、ユーザー名とパスワードを確認するための要求を受け取ります
  • 認証が成功した後、トークンを発行するサーバーは、その後、トークンはクライアントに送信されます
  • クライアントトークンを受け取った後、それは、そのようなクッキーで内部またはローカルストレージ上のように、保存することができます
  • たびに、クライアントは、トークン発行サーバとサーバのニーズにリソースを要求します
  • データ・サーバは要求を受信し、認証が成功した場合、それはクライアントの要求に返されるクライアントは、トークンと内部要求していることを確認します

APPログがサーバに暗号化されたユーザ名とパスワードを送信すると、サーバは、成功した場合、例えばトークンのようなランダムに生成された32ビット・ストリングとして、何らかの方法で、ユーザー名とパスワードを認証するためにサーバに格納され、リターンAPPにトークン、APP後要求されたとき、私たちはこのトークンは、サーバー側の検証トークンを持参しなければならない場所を確認するために必要とする人は、首尾よく目的の結果を返し、エラーメッセージを返すために失敗し、彼は再度ログインしてみましょう。サーバが有効なトークンを提供しており、トークンたびAPP認証要求が有効です。

だから、ここに私の質問:トークンデータベースへのサーバ1に保存されているが、各クエリは非常に時間がかかることはありません。データベースに格納されていない場合は、どこにそれが保存されなければなりません。2.クライアントは、必ず取得するトークン保存され、再びトークン送信する際に復号化され、暗号化されました。データベースまたはコンフィギュレーションファイル、それに保存されていますか?

トークンは、私はこのことは問題ではない、揮発性データ、より多くのユーザーが頻繁にWeiboについて再度ログイン私はとにかく、再びログインできるようにすることができより失われた何もです。
あなたは、一般的なデータベーステーブルがかろうじてMSSQL / MySQLのメモリテーブルを置くことができます(ただし、メモリテーブルのパフォーマンスmysqlは限ら強化すると言われている)ことを考えるのであれば、あなたが本当に言う(にするMemcacheを置くことができ、これは非常に一般的な戦略があります、あなたはRedisの年を置くことができます)(私はこれを達成するために)行ってきた、でも変数辞書はOpenRestyの(限り、あなたは自信を持っていないバーストメモリを)持っているように置くことができます。

トークンはスリップだったが、それは、失われたチケットは再びお金を使うために、チケットよりも穏やかで、缶に彼の再トークン認証操作を失ったので、失われたトークンのコストを容認することができます - あなたが失うすぎないことを提供頻繁に、そしてあなたはそれがユーザーエクスペリエンスの損失をバースト後、ユーザーが認証することを許可する場合。

あなたは、データベースクエリ時間でトークンを維持すると思われる場合、この開始点に基づいて、長すぎる、それがボトルネックになるか、お使いのシステムを危険にさらすだろう、あなたはそれらのメモリを置くことができます。
memcachedのような、Redisの、KVの方法は、それはあなたのニーズトークンクエリに適しています。
これは、あまりにも多くのメモリ、トークンなどの32の文字列があるされていない場合にご契約者どのくらいのメモリをした百万または千万、。
スタンドアロンメモリに大量のデータが実際に運ぶ、またはすべてがライン上で異なるマシンに割り当てられた時にトークン生成が十分に、均一なハイとローカットである限り、大きなリスクを失ったダウン感じることができなかった場合は、メモリが問題になることはありません。

このクライアントの側面あなたは非常に安全な方法を持っていない限りは、そのようなプライバシーデータストレージオペレーティングシステムとして、それは確かに問題トークンリークとなります。例えば、私は、お使いの携帯電話を持って、それはあなたのアイデンティティに有効期限が切れる前に、彼らは、あなたがどこかでログインすることができ、あなたのトークンのコピーを置きます。
この問題に対する簡単な解決策
、対称暗号化トークン記憶装置に記憶された図1に示すように、ロック解除までの時間を使用します。
2、リクエストURL、タイムスタンプ、トークンマージ3つの塩署名、サーバー検証の有効性。
2つのアプローチの開始点は以下のとおりです。もっと簡単に格納されたデータを盗み、逆アセンブル、あなたのプログラムは、あなたの署名と暗号化および復号化アルゴリズムをハックより困難です。しかし、それは難しいので、すべての後に紳士であることは難しい実際には、抗抗悪役の慣行ではありません。格納された暗号化と言って、あなたが見ることツメガエルクライアントがプレーンテキストで保存されることはありませんであれば......スプレー
それはアンタイド暗号文格納されます方法を、それはすることができますどちらも、あなたのメソッドの署名アルゴリズムと塩を知りません組み合わせ消費。
トークンが離れて男を手錠をかけられた場合には、彼は当然、時間は彼の携帯電話は、あなたのアイデンティティで使用することができたとき、それはあなたを盲目になることを、自分の携帯電話に移植すること。
我々は、ユーザーが行うことができます提供することができますので、同様の取り組みは、盗まれたときにリモートで停止するように、過去のトークンのメカニズムを期限切れ。

そして、非常に危険になりますので、HTTPSを使用することをお勧めしてください、とポストボディ内部のトークン、ネットワーク・レベルの上に平文で送信されるトークンです。

 

彼は加えました:

クッキーとセッションの違い

1は、Cookieデータはサーバー上で、クライアントにセッションデータを格納しています。

2は、クッキーは、人々がローカルに保存されている分析することができCOOKIE COOKIEはカンニングと、非常に安全ではない
   セッションを使用する必要があり、アカウントのセキュリティを考慮する。

図3に示すように、セッションは、一定期間内にサーバに保存されます。増加にアクセスする場合は、よりサーバーのパフォーマンスを取ることになる
   サーバーのパフォーマンスを軽減考慮に入れると、あなたはクッキーを使用する必要があります。

図4に示すように、格納されたデータが4Kを超えることができない単一のクッキーは、多くのブラウザは、クッキーを保存した20の部位の最大値に制限されています。

5は、とても個人的な提言:
   ログイン情報やその他の重要な情報がセッションとして保存され
   、必要に応じて追加的な情報は、COOKIEに配置することができます

 

セッションとトークンの違い

  トークンセッションと各要求の署名はまた、盗聴を防止し、リプレイ攻撃、およびセッションが通信のセキュリティを保護するために、リンク層に依存しなければならないので、より良いセッションよりも認証トークンのセキュリティなど、矛盾しないのOAuth。前述したように、あなたがステートフルセッションを実装する必要がある場合、あなたはまだ、サーバー側で状態の一部を保存するために、セッションを増やすことができます

  アプリケーションは通常、サーバーで安らかなAPIを扱います。残りはロジックAPIサーバ処理によるセッションを保存するためにクッキー、十分に自分自身をマークするためにトークンので、セッション、セッション/状態としてアプリのブラウザのようではないステートレス、です。休息APIのステートレスバックエンドでない場合は、アプリでセッションを保存する必要があるかもしれません。Webkitのは、クッキーのセッションを管理するために隠されたブラウザを使用して、アプリに埋め込むことができます。

  HTTPセッションは、ストレージメカニズム、提供永続オブジェクトステートレスHTTPのためのメカニズムです。認証のセッションは、単に安全であると考え、当分の間、理由SIDの予測不可能性のため、ユーザーのセッションに情報を格納する、いわゆる。これは、認証の手段です。それはOAuthのトーク​​ンまたは同様のメカニズムを参照する場合、トークンは、その後、認証と承認を提供することで、認証は、ユーザーのために、アプリケーションのために許可されています。その目的は、情報のAppユーザーにアクセス権を許可することです。ここでのトークンがユニークです。あなたが他のユーザーに行くことができない、アプリの他に転送することはできません。振り向くとセッションを言います。セッションが考慮され、このSIDは、このユーザーのすべての権限を持っていることを、一つだけの単純な認証を提供します。このデータの厳格な機密保持の必要性は、あなたが他のサイトやサードパーティのアプリケーションと共有すべきではない、駅前に格納する必要があります。、ユーザーデータの場合と、サードパーティ製のシェアを必要とするかもしれない簡単なので、または第三者がトークンで、APIインターフェイスを呼び出すことができます。それは問題ではないあなたが常にちょうどあなた自身のウェブサイト、彼ら自身のApp、もし。

 

誤解を破ります:

「ちょうどあなたのブラウザを閉じ、セッションが消えました?」

間違いました。プログラムはセッションを削除するには、サーバーに通知しない限り、セッションの場合、そうでない場合は、サーバーが残ります、手順は一般的に削除セッションにコマンドを発行する際にログオフユーザーで実行されています。

しかし、ブラウザがサーバーがブラウザを知る機会を持っていないように閉じられた、クローズする前にシャットダウンするようにサーバに通知するためのイニシアチブをとることはありません、そのような錯覚がある理由は、ほとんどのセッションメカニズムはセッションIDを格納するためのセッションクッキーを使用することです、およびブラウザは、このセッションIDがなくなった後に再度サーバーに接続するとき、あなたは元のセッションを見つけることができません閉じられています。クッキーHTTPサーバーの設定をハードディスクに保存、またはサーバに元のセッションIDを送信し、ブラウザがリクエストヘッダを作る書き換えるために、いくつかの手段を使用している場合は、まだ再び元のセッションを開くことができるブラウザを開きます。

セッションにはなりません、ブラウザを閉じると削除されたからこそ、サーバーを強制的にセッションの故障までの時間を設定するには、セッションが最初にこの障害の上に随時クライアントで使用されている場合、サーバは、クライアントがその活動を停止したことをすることができセッションでは、ストレージスペースを節約するために削除されます。

おすすめ

転載: www.cnblogs.com/ella-li/p/12008069.html