それでは照合しますが、 私は本当にクライアントが何であるかわかりません トークンとするか なぜトークンが必要なのでしょうか - でも十分でしょうか?
いいえ - トークンは「乗るチケット」です。ちょうど地下鉄のトークンのように。クライアントは、サービスを要求するときにゲートキーパーに提示します。この場合、プロバイダは独自の認証を行い、クライアントはトークンをプロバイダに提示します。プロバイダーが認証を委任する場合もあります。たとえば、the STS modelの場合、プロバイダーはトークンを第三者に渡して認証や承認を行うことがあります。
ビューのサービスの観点から、このトークンは必要があります。
- は「賞味期限」を持っています。それ以外の場合、トークンは無限に再利用可能になります。したがって、サーバー側では、トークンをセッションベースのストアに格納することができます。このストアでは、タイムアウトが発生します。または、期限切れの単純なハッシュテーブルを構築できます。
- は、ホルダーにのみ関連付けることができます。多くの場合、プロバイダはここで近似を使用し、元の要求元IPアドレスからのみトークンを使用できると主張します。
手順3では、プロバイダーはユーザー名とパスワードを確認する必要があります。それが有効であれば、DictionaryまたはHashtableのエントリを参照するトークン(ハッシュ)を作成します。ハッシュテーブル内のオブジェクトは、ユーザー名、IPアドレス、おそらく元の発行時刻、おそらくユーザー名に関連付けられたロールなど、格納する必要があるものを含む構造体です。サービスプロバイダは、このトークン(構造ではなくハッシュ)をクライアントに、通常はセットクッキーとして返します。クライアントが後続の要求でトークンを(クッキーとして)返信すると、プロバイダは辞書をチェックして、トークンが利用可能かどうか、タイムアウトしていないか、要求しているIPアドレスと一致するか、すべては大丈夫です、リクエストを尊重してください。
EDITは、2013年6月
それは今、数年ぶりだし、この答えはまだ票を得ています。 OAuth 2.0フレームワークとベアラトークンを調べることをお勧めします。
基本的にはここに記載されているとおりです。
あなたが良い例の実装をしたい場合、あなたはApigee's Usergrid.を見ることができますそれはこのように動作します:
ユーザーは
POST https://api.usergrid.com/token -d '{"username":"Joe","password":"Sec4et!","grant_type" : "password"}'
ユーザーが応答
にaccess_tokenはを受け取り、認証します
ユーザがヘッダで後続の呼び出しを行いますAuthorization: Bearer XXXXXXXXXX
wここでXXXXXはベアラトークンに置き換えられます。このトークンには、ユーザグリッドサーバによって生存時間が設定されています。
ここでは、トークンを持っている人は、自分が誰であるかを推測していると仮定しています。より安全にするための推奨方法はありますか? –
私が遭遇した問題は、ユーザーがさまざまな要求に対して複数のIPアドレスを変更することです。元の要求とその後の要求は異なるIPからのものでした。 http://serverfault.com/questions/470931/user-http-requests-coming-from-multiple-ip-addresses – dan
ウィキペディア州として - OAuth 2。OAuth 2.0は、署名、暗号化、チャネルバインディング、またはクライアント検証をサポートしていません。ある程度の機密性とサーバ認証のためにSSLに完全に依存しています。[14] [15] OAuth 2.0には、プロトコル自体はセキュリティ専門家によって本質的に安全ではないと記述されており、仕様の主要な貢献者は実装ミスはほとんど避けられないと述べている[17] [18]。 http://en.wikipedia.org/wiki/OAuth –