OAUTH 2.0 Google + APIを使用した迷惑な無効な資格情報
-
22-10-2019 - |
質問
私は自分のサイトの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からの要求であるため、トークンが期限切れになっていないことを知っています。これが私が使用しているプロセスです:
- ユーザーにリクエストを許可してもらいます。
- Googleからリクエストコードを取得します。
- 使用します
cUrl
Googleのリクエストコードを使用してアクセストークンを要求します。 - アクセスコードをPHPセッションに入れます。
- メインページにリダイレクトします。
- メインページ検出セッション変数が設定されており、ログインリンクが表示されません。
- メインページのPHPが使用します
readFile
GoogleからJSONの応答を取得します。 - Googleは無効な資格情報を返します。
これは、PHPによって生成されたURIの例です。これは、readfileに挿入されます。
助けてください?
解決
Google APIクライアントの1人を試しましたか?ボールを転がすために使用できるスターターアプリケーションがあります。
他のヒント
変更されていないアクセストークンを共有すべきではありません - 誰かがそれを使用してあなたになりすますことができます(本当にそれが認められた人のために)。
また、次のようなヘッダーとして認証トークンを渡す方が良いことです。
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'));