1

現在、OAuth2.0を使用してGoogleのリーダーAPIにアクセスしています。URLに返される「コード」と「状態」を正常に取得しました。現在、アクセストークンを受け取るために必要なパラメーターを渡すためにpostメソッドを使用しています。私はかなり長い間それをいじっていました、そして私が持っているのは:

{ "error": "invalid_request" }

私のコードは以下の通りです:

<?php 

session_start();

$code = $_GET['code'];
$state = $_GET['state'];

if ((!is_numeric($state)) || ($state != $_SESSION['state'])) {
    throw new Exception('Error validating state.');
}

$accessTokenExchangeUrl = 'https://accounts.google.com/o/oauth2/token';
$redirectUriPath = '/authentication.php';

$accessTokenExchangeParams = array(
    'code' => $code,
    'client_id' => 'xxxxx',
    'client_secret' => 'xxxxx',
    'redirect_uri' => (isset($_SERVER['HTTPS'])?'https://':'http://') . $_SERVER['HTTP_HOST'] . $redirectUriPath,
    'grant_type' => 'authorization_code'
    );


$goToUrl = $accessTokenExchangeUrl . '?' . http_build_query($accessTokenExchangeParams);

?> 

<!DOCTYPE HTML>
<html>
<head>
    <title></title>
</head>

<body>

    <form action=<?php echo $goToUrl; ?> method="post">
        <input type="submit" value="Click Me!">
    </form>

</body>

</html>

前もって感謝します!

4

1 に答える 1

0

コード、client_idなどの変数をクエリ文字列ではなく(POSTリクエストの本文に)入力パラメーターとして入れてみましたか?Googleの例はそれをそのように示しています

OAuth 2の仕様に従っている場合、クエリ文字列に含めるべきではないというセキュリティ上の理由があります。

于 2012-09-26T03:40:57.150 に答える