YouTube API OAuth请求无效


YouTube API OAuth invalid request

我真的不明白整个OAuth身份验证是如何工作的,我几乎陷入了困境。我试图让用户使用Google PHP客户端API将他/她的YouTube帐户验证到我的服务器。

这是我当前的代码:

<?php
require_once app_path().'/google-apis/Google_Client.php';
require_once app_path().'/google-apis/contrib/Google_YouTubeService.php';
class SignupController extends BaseController {
    public function showSignupForm() {
        $client = new Google_Client();
        $client->setClientId('CLIENTID');
        $client->setClientSecret('CLIENTSECRET');
        $client->setAccessType('offline');
        $client->setDeveloperKey('DEVKEY');
        $youtube = new Google_YoutubeService($client);
        $client->authenticate(Input::get('code'));
        $token = json_decode($client->getAccessToken());
        return View::make('signup')->with('google_token', $token->access_token);
    }
    public function getYTAccess() {
        $client = new Google_Client();
        $client->setClientId('CLIENTID');
        $client->setClientSecret('CLIENTSECRET');
        $client->setAccessType('offline');
        $client->setDeveloperKey('DEVKEY');
        $client->setRedirectUri('REDIRECT_URI');
        $youtube = new Google_YoutubeService($client);
        $authUrl = $client->createAuthUrl();
        return View::make('connect_youtube')->with('authUrl', $authUrl);;
    }
}
?>

这是我正在构建的基于Laravel的应用程序中SignupController的代码。相关路线如下:

Route::get('signup/connect_youtube/return', 'SignupController@showSignupForm');
Route::get('signup', 'SignupController@getYTAccess');

我只是在重定向到我的应用程序后才收到一个无效的请求错误,我知道这与访问令牌有关,只是不知道是什么。

如有任何帮助,我们将不胜感激。

感谢

Tobias Timpe(显然省略了秘密)

简单地说,您必须(至少)完成两个步骤:1.将正确的参数传递给谷歌。参数告诉你1。你是谁(你需要出示你的客户id和客户机密),2。你的要求(在你的情况下是youtube范围)3。redirect_uri,即用户在接受应用程序请求后将被重定向回的位置。4.其他选项,如access_type=offline,它指定您有一个后端服务器来继续身份验证流。

要检查此步骤是否正常工作,您并不总是需要运行代码。只需打印出sdk为您制作的auth_url即可。我提到的所有这些参数都应该嵌入其中。在浏览器中复制粘贴url,如果参数正确,它将带你进入谷歌的同意页面。如果没有,很可能是因为您在Google Apis设置页面中设置的参数与您在auth_url中编写的参数不匹配。例如,不匹配的域、redirect_uris、client_ids和client_secrets。我不确定这是否是您收到的错误。

如果你的参数很好,谷歌将允许你的用户登录,并允许你的应用程序访问youtube范围("consent")。它会将用户的浏览器重定向回您指定的"redirect_uri",参数代码为。因此,这将使您进入服务器脚本必须处理的步骤2。

  1. 谷歌在参数中给出的值是多少?代码是获取访问令牌所需要的。因此,您的服务器路由(redirect_uri)需要提取代码参数并传递给googleapi以交换"凭据"。请注意,身份验证代码只能使用一次。响应凭据将包含access_token和refresh_token。这些对于api调用很重要,因此您需要将它们持久化到存储中,可能使用您正在使用的googlesdk

希望能有所帮助。