web-dev-qa-db-ja.com

OAuth 2.0 PHPクライアントとサーバーの例

OAuth 2.0で利用可能なサーバーバージョン(PDO)をここからダウンロードしました: http://code.google.com/p/oauth2-php/

正直なところ、それが最良の実装であるかどうかはわかりません。

設定され、現在、クライアントが正しい引数を渡すのを待っていることを示すエラーJSONを返します。

現在、Client .incファイルがある「lib」フォルダーが付属しています。正直なところ、アーカイブにPHPの例がなく、オンラインで何も見つからなかったため、どのように使用するのかわかりません。このライブラリを使用してDrupalの例を見つけましたが、モジュールとして独自のDrupal関連の機能があるため、混乱しています。

ここに誰かがこのPHPクライアントライブラリを使用して運が良かったのではないかと思っていました。/api呼び出し?

Facebook Graph API(オープンソース)を試してみたかったのですが、Facebook用に非常にカスタムであることがわかり、自分のサーバーマシンにインストールしたOAuth 2.0サーバーへのURLをどこに置くべきかわかりませんでした。

25
johnshaddad

プロトコルの仕組みがわかれば、OAuth2プロバイダーのセットアップはかなり簡単です。これは2段階または3段階のプロセスです(セットアップと、ユーザーに代わってトークンを取得するか、サーバーからのみトークンを取得するかによって異なります)。

必要なもの:

  • OAuth2プロバイダーの作業コード
  • 忍耐

コードで行う方法を理解するために必要なもの:

  • クライアントを作成する(パブリックおよびプライベートアクセストークン)
  • 承認エンドポイントとトークンエンドポイントの名前の付け方(通常は/authorizeおよび/token
  • スコープの処理方法を理解する

トークンを取得する最初のステップは、/authorize?response_type=code&client_id=[YOUR ID]&redirect_uri=[YOUR REDIRECT URI]&scope=[YOUR SCOPE] 、 どこ:

  • clientid([YOUR ID])はパブリックアクセストークンです
  • redirect_uri([YOUR REDIRECT URI])はリダイレクトURIです。自動化ステップを完了すると、これにリダイレクトされます
  • スコープは、将来のトークンのスコープです

完了すると(通常は送信ボタンがあります)、ブラウザはURLのコード(code = blah)で指定されたURIにリダイレクトされます。この値を保存します。

このコードを取得したら、他のエンドポイントを呼び出します:/token?client_id=[YOUR ID]&client_secret=[YOUR SECRET]&grant_type=authorization_code&scope=[YOUR SCOPE]&code=[YOUR CODE]&redirect_uri=[YOUR REDIRECT URI]

パラメーター:-client_id-再度、クライアント公開鍵-client_secret-秘密鍵(これはサーバー側の呼び出しであると想定されます)-scope-トークンのスコープ-最初の呼び出しに一致する必要があります-redirect_uri-リダイレクトURI-最初の呼び出しに一致する必要があります-コード-受信したコード

すべてうまくいった場合は、トークン情報を含むJSONオブジェクトが画面に表示されます。

バックグラウンドで何が起こるか

ステップ1(認証)

フォームを確認すると、サーバーは一時トークン(呼び出されたときの認証トークン)を作成します。これは通常非常に短い寿命です(私のoauth2 spコードは通常これを60秒に設定します)。これは、サーバーがコードを受信して​​からステップ2をトリガーするまでの時間です。just確認システムであり、その目的はステップ1で提供された情報も保存することですハイジャックを防ぐため。

ステップ2(トークン)

これは、アクセストークンが実際に作成される場所です。多くの検証、多くのものがありますが、結局のところ、トークンはclient_idとトークンをリンクする単なる値です。それだけです。

恥知らずのプラグイン:Laravelフレームワークを使用している場合、私はこれをまったく最初から作成しました(文書化されていないくだらないサンプルコードを使用するのではなく): http:// bundles .laravel.com/bundle/oauth2-sp

44

PHPにはPECLクライアントがあります: http://www.php.net/manual/en/book.oauth.php

Oauth2の素晴らしい紹介: http://www.slideshare.net/aaronpk/an-introduction-to-oauth-2

このサイト oauth2.net/2/ list out 3 oauth開発のさまざまな段階のサーバー。

大手プロバイダー(Facebook、Google、Yahoo、Twitterなど)は独自のOauthを実装しており、さらにOauth 2.0はまだ草案の改訂版であり、各プロバイダーは異なる改訂版を採用しています

6
Alvin K.

私はこのPHPクライアントが以下のことを行う何らかのタイプのクライアントに取り組んでいます:

  • ソケットでリッスンする
  • 認証->リクエスト
  • 認証プロセス->サーバー側のルール
  • 認証->結果としての応答
  • 収集した応答に対するクライアント側の要求を継続

簡単な答え:curl + JSON

認証変数を取得するサーバー側スクリプトへのcurlで要求されたすべての認証プロセスは、処理して比較し、最後にエコー「JSON Encoded」応答が含まれますエコー内の複数の変数がクライアントに返されました。

応答後、 'JSON Decode'変数を独立変数として収集し、クライアント側スクリプトはこのクライアントに対して何を行うかを認識します。

次に、現在認証されているユーザー(セッションで指定)にいくつかのツールを提供します。すべての作業は、 PHPデスクトップ で実行されます。PHPおよびcurlサポート付きの組み込みmongoose Webサーバー。実際、libを使用する必要はありませんので、PHPには独自の完全なライブラリがあります。curl、JSONを使用し、サーバー側のPHPでは、認証目的にはMySQL(条件付きチェック)で十分です。

4
user2557456

私はあなたの質問に部分的に混乱しています。 「設定されており、現在クライアントが正しい引数を渡すのを待っていることを示すエラーJSONを返します」と言いましたが、「接続して認証してからコールバックURLにリダイレクトするもの」の例が必要です「?すべてが実行されており、リクエストの受け入れを待機している場合は、jQuery Ajaxリクエスト(認証ヘッダーを使用)を使用してリクエストを行うことができます。適切なclient_idとclient_secretがプラグインされている限り、ダンプするようにWeb APIを設定したものは何でも返します。

0
CrimsonKissaki