2012-04-23 11 views
1

spring security oauthを使用して、私の会社のREST API用にOAuth 2.0プロバイダを実装しています。
トークンエンドポイントspring security oauthを使用するときに、クライアントが要求パラメータとして希望するスコープを送信するように指示しています(これはClientCredentialsChecker.validateScopeメソッドで発生します)。
私はAccess Token Scopeについての仕様のセクションを理解しているので、scopeパラメータはオプションですが、スコープが存在しない場合、プロバイダは認可リクエストに失敗したと判断することができます。
私の質問は以下のとおりです。oauth 2.0の実装でスコープパラメータが必要な理由

  • 私は スコープを強制するために、プロバイダを許可するように正しく仕様を理解していますか?
  • spring security oauthは、これを設定せずに仕様の厳密な解釈を実装する理由を知っていますか?

おかげ

答えて

1

私はここに質問が本当にダウン結合範囲の概念に来ると思います。仕様にはscopeパラメータがオプションであると書かれていますが、OAuth 2を実装するサービスでスコープを定義する必要があるかどうかは、実際は実装者(この場合はSpring)の責任です。

今はスコープバインディングの概念です。スコープを実装するとき、またはユーザーからアクセスできるようにする情報には、2つの基本的な種類があります。つまり、バインドされたスコープとバインドされていないスコープです。バウンドスコープを使用する場合は、アプリケーションを作成してOAuthキーと秘密を取得するときにスコープを定義する必要があります。バインドされていないスコープ(Springなど)を実装する場合は、最初のリダイレクト呼び出し中にスコープを定義して、ユーザーの認証を取得する必要があります。多くの場合、スコープが定義されていない場合、バインドされていないスコープを実装するサービスは、アクセス可能なユーザーの詳細の既定のセットを使用します。 Springの場合、スコープが必要であると思われます。

免責事項:以前はSpringのセキュリティOAuth実装で作業していませんでした。

Facebookがユーザーデータを要求するために結合していないスコープを使用していますので、彼らの最初のリダイレクト要求は、次のようになります:

あなたに結合および非結合の違いにいくつかのビジュアルを与えるために、ここでいくつかの例がある

//construct Facebook auth URI 
$auth_url = sprintf("%s?redirect_uri=%s&client_id=%s&scope=email,publish_stream", 
      $authorization_endpoint, 
      $callback_url, 
      $key); 

Gowallaの場合(Gowallaがまだ利用可能だった場合)、OAuthキーにバインドされたスコープが使用されていたので、最初のリクエストを行ったときにスコープを定義する必要はなく、このように見えました(スコープパラメータがないことに気づく):

私はそれが役に立てば幸い
//construct Gowalla auth URI 
$auth_url = sprintf("%s?redirect_uri=%s&client_id=%s", 
      $authorization_endpoint, 
      $callback_url, 
      $key); 

ジョン

+0

こんにちはジョン、あなたの答えに感謝。実際には、Springは本質的にバウンドスコープを使用しています。クライアントアプリケーションには登録時にスコープが与えられ、要求されるスコープが許可されているスコープと異なる場合(許容されるもののサブセットを要求できます)、エラースローされます。私が理解していないのは、範囲を要求できないようにしてから、登録時にスコープが返されるようにデフォルトが合意されるようにすることです。 – Ittai

+0

これは実際にPayPal Accessが使用するプロセスと同じです。アプリケーション内で必要なものを定義し、要求を行ったときに再度定義します。このようにする理由は実際にはありません。おそらく追加の検証のために実装されたに過ぎません。私はこれを行うためのスペックには理由があることを伝えたいが、実際にはそうではありません。それが助けになるならば、私はデフォルトの100%あなたに同意します。これはFacebookが使用するモデルであり、私はかなり好きです。 –

関連する問題