web-dev-qa-db-fra.com

Plusieurs valeurs d'étendue à oauth2

J'essaie de publier des valeurs d'étendue sereval pour autoriser mon application pour un service google ...

J'ai essayé avec deux champs de saisie

<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" />

et avec un champ de saisie avec + séparateur

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

Quand j'envoie mon formulaire avec une seule portée, ça marche. sinon avec la valeur de portée sereval, google me redirige avec cette description d'erreur:

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 

Dans Google pour commencer avec oAuth2, cela fonctionne avec deux valeurs de portée.

Voici mon code:

  <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
Christophe Debove

Vous étiez sur la bonne voie lorsque vous les avez combinés en un seul champ. Il ne doit y avoir qu'un seul paramètre d'étendue dans la demande, les valeurs étant séparées par des espaces. Si vous le mettez sous une forme comme celle-ci, le navigateur se chargera d'encoder l'espace pour vous.

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

En plus de la réponse de Steve Bazyl. Lors de l'application de plusieurs étendues pour le même service Google, l'ordre des étendues semble avoir de l'importance. F.e cette chaîne fonctionne comme prévu:

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

alors que celui-ci ne fonctionne pas pour moi:

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

Je n'ai cependant trouvé aucune information à ce sujet dans la documentation.

1
Filip Kowal