2011-12-15 17 views
0

私はPHPでOAuthのようなものを実装しようとしています。私は自分のプライベートリソースを使用できるようにトークンをユーザーに与えます。すべてのユーザーは、まず電子メールとパスワードでログインし、「n」分アイドル状態でない限り永久に有効な一意のトークンを取得する必要があります。したがって、「n」分の要求がない場合は、トークンを破棄する必要があります。トークンは、ユーザーがプライベートリソースにアクセスするために使用されます。私はこれを行うと考えることができPHPセッションと固有のユーザートークン

ことの一つは、私が命名user_tokensのdbテーブルを維持するであろうと、彼らは自分のユーザー名とパスワードでログインしてユニークなトークンを持つエントリが作成されます

...ようです。最後にアクセスされたタイムスタンプが設定され、ユーザーは一意のトークンを応答として与えられます。トークンはユーザーのプライベートリソースにアクセスするために使用でき、トークンを必要とするすべてのリクエストを渡す必要があります。すべての私的な要求は、最後のタイムスタンプと現在のタイムスタンプが "n"分の差を持っているかどうかをチェックします。それ以外の場合は、要求されたリソースで応答を送信し、最後のタイムスタンプを現在のタイムスタンプに設定します。

それは意味がありますか?それとも、これを行うための効率的な方法がもう1つありますか?

私は、トークンはTwitterから返されたものと同じでなければならないと付け加えたいと思います。

+0

は、なぜあなたは再発明しようとしていますOAuthはあなたのニーズに合っていませんか? –

+0

私はOAuthを一度も使用したことはありませんが、ただ読んだだけです。それが唯一の理由です。私は既に知られている概念でこのことをすぐにやり遂げたい。 – Neutralizer

+0

私は実際にPHPのoauthライブラリ(PHPのoauth、またはPHP拡張モジュールのような)を実装するために行きます。セキュリティを扱う際には、既存の、よく考えられた標準を使用するのは良い方法です。あなたが少しの暗号化のバグを作る機会は、実績のある標準を使う場合よりもはるかに大きいです。さらに、ボーナスとして、クライアントの作成がより簡単になり、OAuthクライアントを再利用することができます。また、他の開発者は、サービスと話すための特別なドキュメントを必要としません。 –

答えて

0

あなたはDiggののジェフ・ホドソンによってHTTP_OAuthのPEARパッケージをチェックアウトする必要がありますライブラリを使用してのOAuthを実装するために探している場合は、[1]、およびそこにありますOauth [2]と一緒に使用するデータベースデザインに関するこのサイトの良い記事集。

私はあなたの質問について混乱していると思います。 Webアプリケーション用のAPIを作成したいのですか、またはユーザーのリソースを保護する方法を提供するだけですか? APIを作成する場合は、OAuthを使用し、よく知られているライブラリを使用する必要があります。そうすることを保証します:

  1. 他の開発者は、それはOAuthのRFCに従っているので、あなたのAPIを使用する方法を知っています[3]
  2. Webアプリケーションは、あなたが知っなる
  3. 安全であることがはるかに可能性が高いですベストプラクティスを学び、いくつかの新しいものを学ぶ

あなたがAPIを作るつもりはなく、ユーザーのリソースを保護したいと思うなら、あなたはセッション[4]を使って安全だと思います。ログインしていないと、保護されたリソースにアクセスできません。

[1] HTTP_OAuthパッケージ:http://pear.php.net/pepr/pepr-proposal-show.php?id=607
[2]のOAuthデータベース設計:what is the recommended database structure for OAuth Provider
[3]のOAuth RFC:http://oauth.net/
[4] PHPセッション:http://us2.php.net/manual/en/features.sessions.php

+0

OAuthを実装する必要がありますが、ライブラリがないと思うのですが? – Neutralizer

+0

あなたは十分な時間があり、実際に仕様の複雑さを学びたいなら、私はそれを求めて行くと言う!ただし、ワークフローの仕様、シグネチャの生成、および要求の処理方法の詳細がわかっているため、実際にはかなり時間がかかります。あなたはいつも参考としてライブラリを使用することができますが、ライブラリはすでにたくさんの人々によって使用されているので、それは本当に安定です。 – Steve

0

私はsession_idを使用していた前に、私は、トークンを生成するためにsession_regenerate_idを使用していますが、私はsession_id SESSIDを使用すると、それは私に合うソリューションでしたrenegerating、値を変更することはなかったことを把握していました。今

私も同じユーザーが存在する場合、異なるSESSIDで制御し、一人のユーザのセッションをログアウトするためのオプションを与えることができます。..

私はそれはあなたが探している正確に何であるかどうかを知りませんTOKENについての私の問題を解決します。そして、それが繰り返されることはありません。..

参照:http://br.php.net/manual/en/function.session-regenerate-id.php

関連する問題