0

ドメイン用に作成されたGoogleアプリがあり、メールアドレスもいくつかあるので、認証トークンとコンシューマーシークレットを使用して受信トレイのメールカウントにアクセスします。

問題は、oauth_token_secret と oauth_token と oauth_callback_confirmed を正常に取得することです

oauth_token={OAUTH_TOKEN}&oauth_token_secret={OAUTH_TOKEN_SECRET}&oauth_callback_confirmed=true

しかし、上記のトークンを使用して gmail にアクセスしようとすると、エラーが発生します

Warning: file_get_contents(https://mail.google.com/mail/feed/atom/?oauth_token={OAUTH_TOKEN}&oauth_token_secret={OAUTH_TOKEN_SECRET}&oauth_callback_confirmed=true&max-results=100)
[function.file-get-contents]: failed to open stream: HTTP request failed!
HTTP/1.0 401 Unauthorized in /hermes/bosoraweb022/b1554/ipg.webxtreamsnet/freelancer/auth2.php on line 85

これが私のコードです

<?php

$consumer = 'www.artbymargaret.co.uk';
$secret = '{CLIENT_SECRET}';
$callback = '';
$sign_method = 'HMAC-SHA1';
$version = '1.0';
$scope = 'https://mail.google.com/mail/feed/atom';

function urlencodeRFC3986($string)
{
   return str_replace('%7E', '~', rawurlencode($string));
}


$mt = microtime();
$rand = mt_rand();
$nonce = md5($mt.$rand);
$time = time();

$url = 'https://www.google.com/accounts/OAuthGetRequestToken';
$path = '/accounts/OAuthGetRequestToken';

$post = array(
    'oauth_callback' => urlencodeRFC3986($callback),
    'oauth_consumer_key' => $consumer,
    'oauth_nonce' => $nonce,
    'oauth_signature_method' => $sign_method,
    'oauth_timestamp' => $time,
    'oauth_version' => $version,
    'scope' => urlencodeRFC3986($scope)
);

$post_string = '';
foreach($post as $key => $value)
{
    $post_string .= $key.'='.($value).'&';
}
$post_string = rtrim($post_string, '&');

$key_parts = array($secret);

$key_parts = urlencodeRFC3986($secret);
//$key = implode('&', $key_parts);
$key = $key_parts.'&';
$base_string = 'GET&'.urlencodeRFC3986($url).'&'.urlencodeRFC3986($post_string);
$signature = base64_encode(hash_hmac('sha1', $base_string, $key, true));


$post = array(
    'oauth_version' => $version,
    'oauth_nonce' => $nonce,
    'oauth_timestamp' => $time,
    'oauth_consumer_key' => $consumer,
    'oauth_callback' => $callback,
    'oauth_signature_method' => $sign_method,
    'oauth_signature' => $signature
);        

$header_string = '';
foreach($post as $key => $value)
{
    $header_string .= $key.'="'.urlencodeRFC3986($value).'", ';
}

$header_string = trim($header_string);
$header_string = rtrim($header_string, ',');

$header[] = 'GET '.$path.'?scope='.urlencodeRFC3986($scope).' HTTP/1.1';
$header[] = 'Host: www.google.com';
$header[] = 'Accept: */*';
//$header[] = 'Content-Type: application/x-www-form-urlencoded';
$header[] = 'Authorization: OAuth '.$header_string;


$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, $url.'?scope='.$scope);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

 $xmlresponse= file_get_contents("https://mail.google.com/mail/feed/atom/?".$result."&mail=jane@funtastic.uk.com&max-results=100");
    print_r($out);

//die();

PHPでauth 1xバージョンを使用してGmailの受信トレイフィードにアクセスする方法を知っている人はいますか、クライアントにエラーがありますか

4

2 に答える 2

1

API エンドポイントに対して行っている実際のリクエストではfile_get_contents、クエリ パラメータのみを使用しています。OAuth 1.0 では、このリクエストに適切に署名し、Authorization ヘッダーを渡す必要があります。上記で使用したのと同じ curl コードを使用して、それを行うことができます。

OAuth 1.0 には、エンドユーザーによって付与される承認のための 3 つのステップがあります。

  1. アプリ サーバーは、OAuth 要求トークンのサーバー間要求を行います。
  2. アプリ サーバーは、ユーザーをエンドポイントにリダイレクトして、そのトークンを承認します。彼らはリクエストを承認し、アプリ サーバーにリダイレクトされます。
  3. その後、アプリ サーバーは承認済みのリクエスト トークンをアクセス トークンと交換します。

これらの手順が完了したら、アクセス トークンを使用して、API プロバイダーへの OAuth 要求に署名します。署名は重要です。アクセス トークンは、OAuth 2.0 のように「ベアラー トークン」として使用されません。

標準の OAuth 1.0 メカニズムの詳細については、 https ://developers.google.com/accounts/docs/OAuth_ref#SigningOAuth をご覧ください。

エンド ユーザーの承認なしにサーバー間リクエストを行うだけの場合は、管理している Google Apps ドメインに対して行うことができます。これには、リクエスト トークンやアクセス トークンなどは必要ありません。コンシューマー キーとシークレットのみが必要です。API リクエストを行うための 2-legged OAuth 1.0 メカニズムの詳細については、 https ://developers.google.com/accounts/docs/OAuth#AccessFeed をご覧ください。

ただし、OAuth 2.0 へのアップグレードには間違いなく同意します :)

于 2012-08-14T23:01:51.110 に答える
0

Google OAuth 1.0 for Appsのドキュメントに従って、hdパラメーターを使用していますか?

また、OAuth 1.0 は 2012 年 4 月に廃止されました。

于 2012-08-13T19:09:49.317 に答える