2013-05-10 12 views
8

私は、OAuth2とPerl(Net :: OAuth2)を中心に、具体的にはデータベース用のRESTful APIを設定し、それを使用するアプリケーションを取り上げようとしています。PerlでOAuth2サーバをどのように書くのですか?

Perl Oauth2 package Net :: OAuth2に私を導いた。

として近く、私が理解できるように、私は(私はどこかの雑草にオフだ場合、私を修正してください)実行する必要があります物事のカップルがあります:

  1. サーバー側:RESTサーバーを構築(これはmojoliciousで現在再生されています)。
  2. サーバー側:(??)
  3. クライアントアプリケーション認証/認可サーバを構築するには:私の頭の中でRESTサーバー

に話をWWW :: Mechanizeの(またはいくつかのように)を使用して、ここですどのように動作します:

  1. クライアントアプリがAPIキー(?サーバー(RESTサーバ認証サーバ)に登録し、クライアントに「焼き」)
  2. を持つユーザーは、エントリ(ユーザ名を持っていますおよびパスワード)をサーバー上のデータベース内のテーブル
  3. ユーザーがクライアントアプリケーションを起動し、保護されたリソースにアクセスしようとします(たとえば、行を更新するなど)(クライアントで「この操作を行う」メニューオプションを選択するなどして再度実行します。クライアントは、サーバーが、サーバー
  4. (サーバの)認証/認可ビットにクライアントをリダイレクトし、クライアント、およびユーザーがユーザー
  5. を認証するために魔法のOAuthダンスを行う
  6. )例えばhttp://the.rest.server/api/thisthing、REST APIのURIにあることを翻訳します
  7. サーバ、クライアント、ユーザが別の魔法のOAuthダンスを行い、ユーザがそのリソースURIを見ることを許可されていることを確認します
  8. すべてが良い場合、サーバはクライアントを最初に要求されたリソースURIにリダイレクトしますどんなauth parmsも必要です)。

これはプロセスの合理的な評価ですか?

もしそうなら、 "認証/承認"をRESTサーバーの一部として、または完全に別のサーバーとして使用する方が理にかなっていますか? (同じハードウェア上に)。

Net::OAuth2::Profile::WebServerは、クライアントアプリケーション側で何が起こるかをうまく説明します。 http://cpansearch.perl.org/src/MARKOV/Net-OAuth2-0.55/t/

テスト(私はしない限り、本当に欠けている何か)(再び)「クライアントアプリケーション」になりネット::のOAuth2のWebサーバプロファイルでの作業についてです。

Google APIのような既存のOAuth2サーバーに接続するクライアントを書くための他の例がありますが、サーバーの作成例は見つかりません....(私はRTFMにかなり喜んでいます、私ができる場合を見つける FM ...ポインタが高く評価!)

答えて

4

一般的な考え方は、(政策=>はこのユーザーによって許可このアプリです)資格証明書+トークン生成+取り扱いポリシーを処理するための中央認証サーバーをさせることです。

最初にOAuthサーバーについてお話しましょう。
i)サーバーはユーザーが資格情報を入力できるログインページを担当します。
ii)資格情報を検証し、このサーバーが正しいかどうかを確認して、どのクライアントアプリケーションが呼び出しを行ったかを確認し、「ユーザーの認証を受けていますか」を確認します。 - スコープのコンセプトがここにあります。
iii)アプリのアクセストークン/認証コードを生成します。
iv)アクセストークンを持つクライアントがAPIにヒットした場合、APIは内部的にこのサーバーにトークンを渡す必要があります。トークンの内容を確認するのはこのサーバーの仕事です。

さて、APIは、クライアントアプリケーションからのトークンを受け入れ、それをサーバに渡す必要がありのAPI
I) - サーバからユニークな顧客IDを取得し、その顧客のために、クライアントにデータを返します。

サードパーティのアプリケーション
i)登録プロセスが必要です。クライアントは、クライアントIDと秘密を持つ必要があります。 Googleではconsoleに登録することができます。
ii)各固有のAPIに対応するスコープが必要です。たとえば、Google OAuthアプリを作成するときは、G +、picasa、Googleドライブなどのスコープスコープ用にアプリを登録する必要があります。
iii)アクセストークンはスコープ固有のもので、ユーザー。ユーザークライアントアプリがG +スコープのみを選択し、ユーザーによるアクセスが許可されている場合、アプリはG +エンドポイントに対してのみトークンを使用できます。 OAuthのサーバーを実装する方法について

より詳細な答えがここで見つけることができます:How would an efficient OAuth2.0 server/provider work?

+0

おかげで、divyanshm - 理にかなっています。 – bibliophylum

+1

私は古い(維持されていない?)Perlモジュールも見つけました: [OAuth :: Lite :: Server](http://search.cpan.org/~lyokato/OAuth-Lite-1.31/lib/OAuth/Lite /Server/mod_perl2.pm) ...私は将来の読者のためにここでそれを参照すると思った。 – bibliophylum

関連する問題