nodejs code arg javascript oauth request http-post dropbox-api

javascript - code - dropbox js api



Obtenga Dropbox OAuth Token del código a través de request.js; falla; Equivalente curl Funciona (1)

Parece que en su comando curl , está enviando una solicitud POST codificada en el formulario (que es lo que usa OAuth), pero en su código Node.js está enviando una solicitud codificada JSON.

Pruebe la form: { ... } lugar de json: { ... } .

Estoy tratando de cambiar mi código de obox de Dropbox por un token según la documentación http api .

Cuando ejecuto el comando con curl así:

curl https://api.dropbox.com/1/oauth2/token / -d code=<authorization code> / -d grant_type=authorization_code / -u <app key>:<app secret>

todo funciona bien, y me devuelvo el token de portador. Desafortunadamente, lo que parece ser un código equivalente escrito en node.js con el módulo de solicitud falla.

var request = require("request"); var config = require("./config.json"); request({ url: "https://api.dropboxapi.com/1/oauth2/token", method: "POST", auth: { user: config.client_id, pass: config.client_secret }, json: { code: config.code, grant_type: "authorization_code" } }, function(err, resp, body) { if (err) throw err; console.log(body); });

registros:

{ error_description: ''missing required field "grant_type"'', error: ''invalid_request'' }

Los documentos dicen que en el caso de un error de 400 (que es), tengo:

Mal parámetro de entrada. El mensaje de error debe indicar cuál y por qué.

Aunque como se puede ver en el código anterior, se está especificando grant_type .

Notablemente, los documentos brindan una segunda opción para autenticarse, aunque esto también falla, aunque con un mensaje diferente:

Descripción (abreviado)

Las llamadas a / oauth2 / token deben autenticarse con la clave y el secreto de la aplicación. Estos pueden pasar como parámetros POST (ver los parámetros a continuación) o a través de autenticación básica HTTP. Si se utiliza la autenticación básica, la clave de la aplicación debe proporcionarse como el nombre de usuario, y el secreto de la aplicación debe proporcionarse como la contraseña.

Params

  • code Cadena El código adquirido al dirigir a los usuarios a / oauth2 / authorize? response_type = code.
  • grant_type String El tipo de concesión, que debe ser authorization_code .
  • client_id Cadena Si las credenciales se pasan en los parámetros POST, este parámetro debe estar presente y debe ser la clave de la aplicación (que se encuentra en la consola de la aplicación).
  • Cadena client_secret Si las credenciales se pasan en los parámetros POST, este parámetro debe estar presente y debe ser el secreto de la aplicación.
  • redirect_uri String Solo se usa para validar que coincida con el original / oauth2 / authorize, que no se usa para redireccionar nuevamente.

Mi intento en el procedimiento de autenticación alternativo:

var request = require("request"); var config = require("./config.json"); request({ url: "https://api.dropboxapi.com/1/oauth2/token", method: "POST", json: { code: config.code, grant_type: "authorization_code", client_id: config.client_id, client_secret: config.client_secret } }, function(err, resp, body) { if (err) throw err; console.log(body); });

registros:

{ error_description: ''No auth function available for given request'', error: ''invalid_request'' }

En caso de que la respuesta completa de dropbox para cualquiera de mis intentos de solicitud fuera útil , la publiqué en pastebin .

No incluyo el redirect_uri ya que no lo usé como parte del flujo de código. Esto está permitido según los documentos. En cualquier caso, no tengo ningún problema al omitirlo en el comando curl que tiene éxito.

Teniendo en cuenta que mi llamada API tiene éxito cuando se envía a través de curl, estoy claramente haciendo algo mal con mi solicitud js. ¿Qué puedo hacer para obtener el token portador que espero?