Domanda

Sto cercando di utilizzare OAuth 2.0 per Google + api sul mio sito, e io continuo a ricevere:

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

La cosa è, non so perché questo sta accadendo. Ho un accesso gettone valido da parte di Google, ma Google dice che si tratti non è valido. So che il token non è scaduto perché i dati JSON è richiesta da parte di Google entro 10 secondi di ottenere il token di accesso. Qui è il processo che sto usando:

  1. Ottieni all'utente di autorizzare la richiesta.
  2. Ottiene codice di richiesta da parte di Google.
  3. Utilizza cUrl per richiedere l'accesso token con il codice di richiesta da parte di Google.
  4. Mette il codice di accesso in una sessione php.
  5. redirect tornare alla pagina principale.
  6. Pagina principale rileva è impostato variabile di sessione e non visualizza link di accesso.
  7. PHP su usi principali pagina readFile per ottenere la risposta JSON da Google.
  8. Google restituisce credenziali non valide.

ecco un uri esempio generato da php che viene inserito readFile:

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

Aiuto per favore?

È stato utile?

Soluzione

Hai provato uno dei client API di Google? Ci sono applicazioni di avviamento è possibile utilizzare per ottenere il rotolamento palla.

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

Altri suggerimenti

Non si deve condividere un accesso inalterata Token -. Qualcuno può utilizzare che per impersonare voi (in realtà per chiunque è stato concesso)

E 'anche meglio passare l'Auth token come un colpo di testa, come:

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

Non so se questo è essenziale, ma il messaggio di errore sembra indicare un errore di autenticazione nell'intestazione modo si può essere fornendo un'intestazione di autorizzazione, che non corrisponde a quello che vi serve.

Ecco una soluzione che utilizza PECL OAuth estensione di PHP. La volontà firmare la richiesta il modo in cui è stato definito. In questo caso, in un oggetto JSON file di configurazione che è stato importato nello 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);

Ho avuto questo problema prima, ma con twitter.

Per OAuth in realtà abbiamo comunicare con il cinguettio due volte, prima alla richiesta di token acquisiscono, secondo di autorizzare l'invio del primo token che è già firmato. Forse a superare solo il 1 ° uno.

Sono stato sempre lo stesso errore 401 "credenziali non valide" per qualche ora. Che ho notato che ho conservato la mia access_token nel database in un campo VARCHAR (50). Si tagliò una porzione del access_token. Ho aumentato la lunghezza della colonna. FISSO.

controllare il doppio della lunghezza del campo nel database in cui si intende usare l'access_token e anche la vostra refresh_token!

Credo che l'API me è rotto. Il problema è andato quando provo a richiedere un URI con un vero e proprio ID utente. Voglio dire, in questo modo: https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}

Elimina il tuo token.json file, quindi tentare di nuovo la richiesta.

Il problema per me è stata l'intestazione "Autorizzazione" a GET / richiesta POST:

documentazione Google ha detto: Autorizzazione: / * OAuth 2.0 gettone qui * /

Ma la corretta è: Autorizzazione: OAuth / * OAuth 2.0 gettone qui * /

Sì! includere "giuramento" prima chiave di token!

Se si utilizza cURL (PHP), utilizzare:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top