【问题标题】:How to get access token from service account如何从服务帐户获取访问令牌
【发布时间】:2017-10-07 09:06:12
【问题描述】:

我是 google oauthopenid 连接的新手,可以说我需要用户在我的 youtube 频道中存储视频的服务帐户,我创建了文档中给出的服务。但我不知道如何获取访问令牌让像这样说出我的代码

    $param = $this->getParameter('kernel.root_dir').'/xxxx.json';
    $client = new \Google_Client();
    $client->setClientId('xxxxxxxx');
    $client->setScopes('https://www.googleapis.com/auth/youtube');
    $client->setRedirectUri('http://localhost:8000/youtube/1/token');
    putenv('GOOGLE_APPLICATION_CREDENTIALS='.$param.'');
    $authurl = $client->createAuthUrl();
    $youtube = new \Google_Service_YouTube($client);
    file_get_contents($authurl);

当我运行file_get_contents($authurl) 时得到401 error,我在这里犯了什么错误?

【问题讨论】:

    标签: php oauth oauth-2.0 google-oauth youtube-data-api


    【解决方案1】:

    您可能会在几个方面感到困惑。 Oauth2 提示用户进行身份验证,询问用户我可以访问您的 YouTube 数据。开发人员会获得一个刷新令牌,他们可以使用该令牌检索新的访问令牌并访问用户 YouTube 频道上的数据。

    服务帐号已预先授权。我可以获取一个服务帐户电子邮件地址并授予它访问我的 Google 驱动器帐户上的文件夹的权限,然后它可以读取和写入该文件夹。

    YouTube API 不支持服务帐户。

    对于 YouTube,您需要在自己保存刷新令牌后验证您的代码,然后将该刷新令牌添加到您的代码中。然后,当另一个用户希望将视频上传到您的帐户时,您可以使用刷新令牌获取访问令牌并上传文件。

    这里有一个很好的问题,关于如何在 php 客户端库How to refresh token with Google API client? 中使用刷新令牌@

    $client->refreshToken($refreshToken);
    $newtoken=$client->getAccessToken();
    

    【讨论】:

    • 谢谢,刷新令牌是否有生命周期,youtube 是否有任何理由不支持服务帐户?
    • 刷新令牌应该不会过期,但他们可以你必须密切关注它,如果它过期了就通知自己。如果它在六个月内未使用,它将过期。除此之外,你应该是安全的。
    • 好的,谢谢 :-)
    • 这只是我的看法:YouTube 不是谷歌项目,最初他们收购了这家公司。 YouTube 的基础架构可能无法支持服务帐户。但这只是猜测。
    • 但如果我试图从刷新令牌中获取 access_token,它会一次又一次地显示同意屏幕以获取权限,我该如何解决这个问题?
    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 2016-04-29
    • 2014-09-08
    • 2021-12-02
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多