私はここに質問が本当にダウン結合範囲の概念に来ると思います。仕様には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);
、
ジョン
こんにちはジョン、あなたの答えに感謝。実際には、Springは本質的にバウンドスコープを使用しています。クライアントアプリケーションには登録時にスコープが与えられ、要求されるスコープが許可されているスコープと異なる場合(許容されるもののサブセットを要求できます)、エラースローされます。私が理解していないのは、範囲を要求できないようにしてから、登録時にスコープが返されるようにデフォルトが合意されるようにすることです。 – Ittai
これは実際にPayPal Accessが使用するプロセスと同じです。アプリケーション内で必要なものを定義し、要求を行ったときに再度定義します。このようにする理由は実際にはありません。おそらく追加の検証のために実装されたに過ぎません。私はこれを行うためのスペックには理由があることを伝えたいが、実際にはそうではありません。それが助けになるならば、私はデフォルトの100%あなたに同意します。これはFacebookが使用するモデルであり、私はかなり好きです。 –