Net :: Google :: Spreadsheets登录失败。需要使用双腿OAuth2

时间:2015-05-29 13:25:41

标签: perl-module google-spreadsheet-api google-oauth2

我有一个使用Net :: Google :: Spreadsheets的应用程序。它本周早些时候开始失败并出现身份验证错误。我的理解是谷歌已经弃用了一些身份验证方法,现在我们要使用OAuth2。

我的应用程序在无头服务器上运行,因此我无法使用Net::Google::AuthSub login failed with new Google Drive version

中显示的三足OAuth2解决方案

我需要对服务帐户使用双腿认证。我将代码放在一起构建JWT,并获取access_token(详见Google开发人员文档)。

我需要一些帮助的方法是我需要使用的方法让Net :: Google :: Spreadsheets使用此access_token,或者使用一种方法来执行与此模块一起使用的双腿OAuth2。

1 个答案:

答案 0 :(得分:3)

如果您已设法创建access_token,那么您应该能够通过使用它来创建新的Net::OAuth2::AccessToken对象,使其成为Net :: Google :: Spreadsheets的正确格式,然后继续进行更多操作或更少,如example you linked to in the other thread

use Net::Google::Spreadsheets;
use Net::Google::DataAPI::Auth::OAuth2;
use Net::OAuth2::AccessToken;

my $oauth2 = Net::Google::DataAPI::Auth::OAuth2->new(
    client_id => 'my_client_id.apps.googleusercontent.com',
    client_secret => 'my secret',
    scope => ['http://spreadsheets.google.com/feeds/'],
    );
my $access_token = 'token you generate somehow';

my $token = Net::OAuth2::AccessToken->new(access_token => $access_token,
                  profile => $oauth2->oauth2_webserver,
                  token_type => 'Bearer',
                  );
$oauth2->access_token($token);

my $service = Net::Google::Spreadsheets->new(auth => $oauth2);

然后您可以从那里使用该服务。如果你想重复使用相同的令牌,你也需要获得一个refresh_token并包含它,以及设置auto_refresh,但是如果你每次都生成一个新的,那么这应该有效。