Pregunta

Estoy tratando de usar OAuth 2.0 para la API de Google + en mi sitio, y sigo recibiendo:

{
    "error": {
        "errors": [{
            "domain": "global",
            "reason": "authError",
            "message": "Invalid Credentials",
            "locationType": "header",
            "location": "Authorization"
        }],
        "code": 401,
        "message": "Invalid Credentials"
    }
}

La cuestión es que no sé por qué está sucediendo esto. Tengo un token de acceso válido de Google, pero Google dice que no es válido. Sé que el token no ha expirado porque los datos JSON se solicitan desde Google dentro de los 10 segundos de obtener el token de acceso. Aquí está el proceso que estoy usando:

  1. Haga que el usuario autorice la solicitud.
  2. Obtiene código de solicitud de Google.
  3. Usos cUrl Para solicitar el token de acceso con el código de solicitud de Google.
  4. Pone el código de acceso en una sesión de PHP.
  5. Redirige a la página principal.
  6. La página principal detecta la variable de sesión y no muestra el enlace de inicio de sesión.
  7. PHP en la página principal usa readFile Para obtener la respuesta JSON de Google.
  8. Google devuelve credenciales no válidas.

Aquí hay un ejemplo URI generado por PHP que se inserta en ReadFile:

https://www.googleapis.com/plus/v1/people/me?prettyprint=true&access_token=ya29.ahes6zqrgovda5fhsoju3qcm1denymjpywz1muue4cwgh5n70ocakwwwwwwwwwwww

¿Ayuda por favor?

¿Fue útil?

Solución

¿Has probado uno de los clientes de Google API? Hay aplicaciones de arranque que puede usar para que la pelota se ponga en marcha.

https://developers.google.com/+/downloads

Otros consejos

No debe compartir un token de acceso inalterado: alguien puede usarlo para hacerse pasar por usted (realmente por quien se le otorgó).

También es mejor pasar el token de autenticación como encabezado, como:

curl -H "Authorization: OAuth ya29.xyzxyz" "https://www.googleapis.com/plus/v1/people/me"

No estoy seguro si eso es esencial, pero su mensaje de error parece indicar un error de autenticación en el encabezado para que pueda proporcionar un encabezado de autorización que no coincida con el que necesita.

Aquí hay una solución usando PHP's pecl oauth extensión. Firmará la solicitud de la forma en que la ha definido. En este caso, en un archivo de configuración, objeto JSON que se importó al script.

        $oauth = new OAuth($this->config->consumer_key, $this->config->consumer_secret, $this->config->signature_method, $this->config->auth_type);
        $oauth->setVersion($this->config->version);
        $oauth->setToken($accessToken->oauth_token, $accessToken->oauth_token_secret);

        $params = array(
            'fields' => 'displayName,emails,id,image,name',
            'pp' => 1
        );

        $oauth->fetch('https://www.googleapis.com/plus/v1/people/me', $params, OAUTH_HTTP_METHOD_GET);

        // extract response
        $json = Zend_Json::decode($oauth->getLastResponse(), Zend_Json::TYPE_OBJECT);

Tenía este problema antes pero con Twitter.

Para OAuth, en realidad nos comunicamos con Twitter dos veces, primero para adquirir Token de solicitud, segundo para autorizar el envío del primer token que ya está firmado. Quizás solo superes el primero.

He estado recibiendo el mismo error de 401 "credenciales no válidas" durante unas horas. Entonces noté que almacené mi access_token en la base de datos en un campo Varchar (50). Cortó una parte del access_token. Aumenté la longitud de la columna. FIJADO.

¡Compruebe dos veces la longitud del campo en la base de datos donde almacena su access_token y también su refrescante!

Pienso que el me La API está rota. El problema se ha ido cuando intento solicitar un URI con una ID de usuario real. Quiero decir así: https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}

Elimina tu token.json Archivo, luego intente la solicitud nuevamente.

El problema para mí fue la "autorización" del encabezado en la solicitud Get/Post:

Google Documation dijo: Autorización: / * OAuth 2.0 Token aquí * /

Pero lo correcto es: Autorización: Oauth / * Oauth 2.0 Token aquí * /

¡Sí! ¡Incluya "Oath" antes de su llave de token!

Si está utilizando Curl (PHP), use:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top