質問

私は自分のサイトのGoogle + APIにOAUTH 2.0を使用しようとしています。

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

事は、なぜこれが起こっているのかわからないということです。 Googleからの有効なアクセストークンがありますが、Googleはそれが無効であると言います。 JSONデータは、アクセストークンを取得してから10秒以内にGoogleからの要求であるため、トークンが期限切れになっていないことを知っています。これが私が使用しているプロセスです:

  1. ユーザーにリクエストを許可してもらいます。
  2. Googleからリクエストコードを取得します。
  3. 使用します cUrl Googleのリクエストコードを使用してアクセストークンを要求します。
  4. アクセスコードをPHPセッションに入れます。
  5. メインページにリダイレクトします。
  6. メインページ検出セッション変数が設定されており、ログインリンクが表示されません。
  7. メインページのPHPが使用します readFile GoogleからJSONの応答を取得します。
  8. Googleは無効な資格情報を返します。

これは、PHPによって生成されたURIの例です。これは、readfileに挿入されます。

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

助けてください?

役に立ちましたか?

解決

Google APIクライアントの1人を試しましたか?ボールを転がすために使用できるスターターアプリケーションがあります。

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

他のヒント

変更されていないアクセストークンを共有すべきではありません - 誰かがそれを使用してあなたになりすますことができます(本当にそれが認められた人のために)。

また、次のようなヘッダーとして認証トークンを渡す方が良いことです。

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

それが不可欠かどうかはわかりませんが、エラーメッセージはヘッダーの認証エラーを示しているように思われるため、必要なものと一致しない認証ヘッダーを提供する可能性があります。

PHPを使用したソリューションはこちらです pecl oauth 拡大。あなたがそれを定義した方法にリクエストに署名します。この場合、スクリプトにインポートされた構成ファイルJSONオブジェクト。

        $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);

私は以前にこの問題を抱えていましたが、Twitterで。

OAuthの場合、実際にTwitterと2回通信し、最初にリクエストトークンを取得し、次に既に署名されている最初のトークンの送信を許可します。たぶん、あなたは最初のものだけを克服するだけです。

数時間、同じ401の「無効な資格情報」エラーを取得しています。 Varchar(50)フィールドのデータベースにAccess_Tokenを保存していることに気づきました。 Access_Tokenの一部を切り取りました。列の長さを増やしました。修繕。

Access_Tokenとrefresh_tokenを保存するデータベースのフィールドの長さを再確認してください!

私は思います me APIが壊れています。実際のユーザーIDでURIをリクエストしようとすると、問題はなくなりました。私はこのように意味します: https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}

削除します token.json ファイルしてから、再度リクエストを試みます。

私にとっての問題は、get/postリクエストのヘッダー「承認」でした。

Googleのドキュメントは次のように述べています:承認: / * oauth 2.0トークンはこちら * /

しかし、正しいのは次のとおりです。承認:oauth / * oauth 2.0トークンはこちら * /

はい!トークンキーの前に「誓い」を含めてください!

Curl(PHP)を使用している場合は、以下を使用してください。

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top