ここでの質問は、スコープ バインディングの概念に帰着すると思います。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);
それが役立つことを願っています、
ジョン