2011-12-09 30 views
41

trato de publicar los valores de alcance sereval para permitir que mi solicitud de algún servicio de Google ...Valores Alcance múltiples para OAuth2

me trataron con dos campos de entrada

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

y con un campo de entrada con + separador

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

Cuando envío mi formulario con un solo alcance Funciona. de otro modo con el valor de alcance Sereval google me redirigir con esta descripción del error:

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 

En el Google getting started con OAuth2 funciona con dos valores de alcance.

Aquí está mi código:

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

Respuesta

85

Usted estaba en el camino correcto cuando se combinaron para un solo campo . Solo debe haber un parámetro de ámbito en la solicitud, con los valores separados por espacios. Si lo está poniendo de una forma como esa, el navegador se encargará de codificar el espacio para usted.

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

no tengo mi código hasta el día de mañana, pero gracias a que Evan si parece raro –

+2

actualmente en 2017 se debe utilizar 'value = "https://www.googleapis.com/auth/calendar correo electrónico"' – user3479125

+3

Para los curiosos, [RFC 6749, Sección 3.3] (https://tools.ietf.org/html/rfc6749#section-3.3) define el parámetro 'scope' como' El valor del parámetro scope se expresa como una lista de cadenas delimitadas por espacios, sensibles a mayúsculas y minúsculas' – davidjb