web-dev-qa-db-ja.com

oauth2への複数のスコープ値

Googleサービスにアプリケーションを許可するために、別のスコープ値を投稿しようとしています...

2つの入力フィールドで試しました

<input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar" />  
<input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.email" />

および+区切り文字を含む1つの入力フィールド

<input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/userinfo.email" />  

1つのスコープのみでフォームを送信すると機能します。それ以外の場合、sereval scope value googleでこのエラーの説明で私をリダイレクトします:

http://localhost:49972/redirect.aspx#error=invalid_request&error_description=OAuth+2+parameters+can+only+have+a+single+value:+scope&error_uri=http://code.google.com/apis/accounts/docs/OAuth2.html 

Google getting started でoAuth2を使用すると、2つのスコープ値で動作します。

ここに私のコードがあります:

  <form id="form1" method="post" action="https://accounts.google.com/o/oauth2/auth?" >
    <div>
        <input type="hidden" name="response_type" value="code" />
        <input type="hidden" name="client_id" value="my client id" />
        <input type="hidden" name="redirect_uri" value="http://localhost:49972/redirect.aspx" />
        <input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar" />
        <input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.email" />

        <input type="hidden" name="state" value="/profile" />
        <input type="submit" value="go" />
    </div>
    </form>
53

それらを単一のフィールドに結合したとき、あなたは正しい軌道に乗っていました。リクエストには、値をスペースで区切って、スコープパラメーターを1つだけ含める必要があります。そのような形式で配置する場合、ブラウザがスペースのエンコードを処理します。

<input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/userinfo.email" />
98
Steve Bazyl

スティーブバジルの答えに加えて。同じGoogleサービスに複数のスコープを適用する場合、スコープの順序が重要なようです。 F.eこの文字列は期待どおりに機能します:

"https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.metadata.readonly"

これは私には機能しませんが:

"https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/drive"

ただし、ドキュメントにはそれに関する情報がありません。

1
Filip Kowal